java - 更改 JTable 的单元格颜色时的不同更改

标签 java swing

在我的 Java 程序中,我在配置表格单元格的颜色时遇到了问题。 正如您在下面看到的,我在单元格中有 4 个不同的列组件。 当我更改所有这些单元格的颜色时,只有 column1 的颜色发生变化。

DefaultTableModel tableModel = new DefaultTableModel(columns,0){
    @Override
    public Class<?> getColumnClass(int column) {
        switch(column) {
            case 0: return String.class;
            case 1: return ImageIcon.class;
            case 2: return Integer.class;
            case 3: return Integer.class;
            default: return Object.class;
        }
    }
};

我已经改变了单元格的颜色:

table1.setDefaultRenderer(Object.class, new ColorChange);
// I guess Object.class causes the problem
public class ColorChange implements TableCellRenderer {

    public final DefaultTableCellRenderer DEFAULT_RENDERER = new DefaultTableCellRenderer();

    @Override
    public Component getTableCellRendererComponent(JTable table, Object value,
                                                   boolean isSelected, boolean hasFocus, int row, int column) {
        Component c = DEFAULT_RENDERER.getTableCellRendererComponent(table,
                value, isSelected, hasFocus, row, column);

        // Apply zebra style on table rows
        if (row % 2 == 0) {
            c.setBackground(Color.WHITE);
        } else {
            c.setBackground(Color.decode("#F8F8F8"));
        }

        return c;
    }

}

那么问题是如何更改所有列的颜色?

提前谢谢你。

最佳答案

As you see below, I have 4 different column components in the cells. And when I change the colors of all these cells, just column1's color changing.

table1.setDefaultRenderer(Object.class, new ColorChange);

渲染器仅用于指定的类。 Object.class 被指定为没有特定渲染器的类的捕获所有类。

在您的情况下,它将仅用于 String 对象。 IconInteger 类已经有了自定义渲染器。

您还可以添加:

table1.setDefaultRenderer(Icon.class, new ColorChange);
table1.setDefaultRenderer(Integer.class, new ColorChange);

但是,如果您这样做,您将失去那些渲染器的自定义格式。如果您想继续使用这种方法,您将需要一个“IconColorChange”和“IntegerColorChange”渲染器。

相反,我建议您查看 Table Row Rendering对于一个解决方案,它允许您在仍然使用渲染器或表格的自定义格式的同时进行行级着色。这不需要创建自定义渲染器。

关于java - 更改 JTable 的单元格颜色时的不同更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37500636/

相关文章:

java - TableModelListener 和多列验证

Java 按钮宽度

java - 防止 JLabel 在 setText() 处调整大小

java - 如何在 jstack 输出中显示源行号?

java - 无法单击 Appium 中 LinearLayout 下存在的元素

java - 使用 Closure-compiler.jar 使用 ANT 进行 r.js 优化时出现非法字符错误

java - 如何在应用程序退出之前使文本字段失去焦点?

java - 默认表模型可编辑

java - 使用 java 编写 .ics iCal 文件

Java Swing - 如何在模型和 View 之间创建最佳通信