JTable 的 Customrenderer 被多次调用
Customrenderer for JTable is getting called multiple times
我想根据其值为 JTable 中的某些行着色。但是我的 customrenderer
被调用了无限次,整个 table 被着色而不是某些行。
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus,int row, int column)
{
Component c = render.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
DefaultTableModel model = (DefaultTableModel)table.getModel();
String flag = (String)model.getValueAt(row, 0);
if(flag.equalsIgnoreCase("java"))
{
c.setBackground(new Color(0xE8F2FE)); //light blue
}
return c;
}
所有单元格使用相同的渲染器。更改渲染器的背景后,该背景将用于所有单元格。
因此您需要 "else condition" 将背景设置为默认颜色。类似于:
else
c.setBackground( table.getBackground() );
您还可以查看 Table Row Rendering 的另一种方法来突出显示行背景,这种方法可以更简单,尤其是在每列中发现不同类型的数据时。
我想根据其值为 JTable 中的某些行着色。但是我的 customrenderer
被调用了无限次,整个 table 被着色而不是某些行。
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus,int row, int column)
{
Component c = render.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
DefaultTableModel model = (DefaultTableModel)table.getModel();
String flag = (String)model.getValueAt(row, 0);
if(flag.equalsIgnoreCase("java"))
{
c.setBackground(new Color(0xE8F2FE)); //light blue
}
return c;
}
所有单元格使用相同的渲染器。更改渲染器的背景后,该背景将用于所有单元格。
因此您需要 "else condition" 将背景设置为默认颜色。类似于:
else
c.setBackground( table.getBackground() );
您还可以查看 Table Row Rendering 的另一种方法来突出显示行背景,这种方法可以更简单,尤其是在每列中发现不同类型的数据时。