我正在尝试更改JTable中列中一个或多个特定单元格的颜色。我在这里看到的答案都是指这种特殊的方法;
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column)
{
Component y = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
y.setBackground(new Color(255,0,0));
return y;
}
但问题是我不知道它是如何工作的,在我的其他类中我有一个字符串的Jtable,我想根据它们的字符串值改变某些单元格的颜色,但是我找到的解决方案只有允许我更改jtable中整列单元格的颜色,而不是特定的单元格。
答案 0 :(得分:5)
我有一个Jtable字符串,我想根据字符串值
更改某些单元格的颜色
所有单元格都使用相同的渲染器,因此您需要每次都重置背景。
您的自定义渲染器代码中需要if条件。类似的东西:
if (!isSelected)
if (value.equals(...))
y.setBackground(new Color(255,0,0));
else
y.setBackground(table.getBackground())
答案 1 :(得分:0)
您可以使用DefaultTableCellRenderer为JTable中的备用行着色。
table.setDefaultRenderer(Object.class, new TableCellRenderer(){
private 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);
if(isSelected){
c.setBackground(Color.YELLOW);
}else{
if (row%2 == 0){
c.setBackground(Color.WHITE);
}
else {
c.setBackground(Color.LIGHT_GRAY);
} }
//Add below code here
return c;
}
});
如果要使用特定行的值为行着色,则可以使用类似这样的内容。将这些行添加到上面
if(table.getColumnModel().getColumn(column).getIdentifier().equals("Status")){//Here `Status` is column name
if(value.toString().equals("OK")){//Here `OK` is the value of row
c.setBackground(Color.GREEN);
}
}