在我的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;
}
}
所以问题是如何更改所有列的颜色?
提前谢谢。
答案 0 :(得分:3)
如下所示,我在单元格中有4个不同的列组件。当我改变所有这些单元格的颜色时,只需改变column1的颜色。
table1.setDefaultRenderer(Object.class, new ColorChange);
渲染器仅用于指定的类。对于没有特定渲染器的类,Object.class被指定为catch all类。
在您的情况下,它仅用于String
个对象。 Icon
和Integer
类已有自定义渲染器。
您还可以添加:
table1.setDefaultRenderer(Icon.class, new ColorChange);
table1.setDefaultRenderer(Integer.class, new ColorChange);
但是,如果这样做,您将失去这些渲染器的自定义格式。如果你想继续这种方法,你需要一个“IconColorChange”和“IntegerColorChange”渲染器。
相反,我建议你查看Table Row Rendering一个解决方案,它允许你在使用渲染器或表的自定义格式的同时进行行级着色。这不需要创建自定义渲染器。