JBable图标/动画中的JButton按下时更改

mfr*_*isp 2 java swing jtable jbutton tablecellrenderer

我真的不知道怎么用文字解释这个.所以我有一个带JButton Column的JTable.我为此按钮设置了一个图标,但是当我按下或按住按钮时,它会变为您在下面看到的图像.

在此输入图像描述

如何禁用此效果?我试过以下无济于事:

  renderButton.setContentAreaFilled(false);
  renderButton.setIcon(new ImageIcon(ButtonColumn.class
                .getResource("/com/graphics/clear_left.png")));
  renderButton.setRolloverIcon(new ImageIcon(ButtonColumn.class
                .getResource("/com/graphics/clear_left.png")));
  renderButton.setRolloverSelectedIcon(new ImageIcon(ButtonColumn.class
                .getResource("/com/graphics/clear_left.png")));
  renderButton.setPressedIcon(new ImageIcon(ButtonColumn.class
                .getResource("/com/graphics/clear_left.png")));
Run Code Online (Sandbox Code Playgroud)

dic*_*c19 7

根据你的代码,我想你使用罗布Camick的ButtonColumn得到的按钮栏装饰.该类实现了TableCellRendererTableCellEditor接口,为JButton您指定的列中的单元格提供了渲染器和编辑器,在您的情况下是最后一个.

你所做的是自定义渲染器按钮以显示你想要的图标,但现在你必须自定义编辑器按钮以覆盖默认按钮的外观.

在这两种情况下,我都不会直接修改源代码,而是覆盖两种getTableCellXxxComponent(...)方法,就像任何其他自定义渲染器/编辑器一样.像这样的东西会成功:

JTable table = new JTable(tableModel);

Action action = new AbstractAction() {...};

ButtonColumn buttonColumn = new ButtonColumn(table, action, 5) {
    @Override
    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
        JButton button = (JButton)super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
        button.setContentAreaFilled(false);
        button.setBorder(BorderFactory.createEmptyBorder());
        // Customize the icon and whatever you want here
        return button;
    }

    @Override
    public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
        JButton button = (JButton)super.getTableCellEditorComponent(table, value, isSelected, row, column);
        button.setContentAreaFilled(false);
        // Customize the icon and whatever you want here
        return button;
    }
};
Run Code Online (Sandbox Code Playgroud)

笔记

始终包含指向非标准库或类的链接.否则,人们将无法帮助您完成他们不熟悉的课程.

正如@mKorbel所指出的,JSpinner用于渲染第5列的用法不完整:如果选择了单元格,则应该应用选择背景颜色(参见第一行).