我想知道是否可以设置指定的行和列颜色而不定义我自己的自定义TableCellRender。
目前我正在使用此代码
TableCellRenderer cellRenderer = this.devicePropertyTable.getCellRenderer(1, 1);
Component cellRenderComponent = cellRenderer.getTableCellRendererComponent(this.devicePropertyTable, "", false, false, 1, 1);
if (propertyValue.equalsIgnoreCase("true"))
{
cellRenderComponent.setBackground(Color.green);
}
else
{
cellRenderComponent.setBackground(Color.red);
}
我认为这将获得表节点1,1的单元渲染器,并用相应的颜色对其进行着色。但是会发生什么事情会使整个桌子变色。
有没有其他方法可以在不创建自定义TableCellRender的情况下执行此操作?
答案 0 :(得分:4)
我想知道是否可以设置指定的行和列颜色而不定义我自己的自定义TableCellRender。
覆盖JTable的prepareRenderer(...)方法。
请参阅Table Row Rendering了解一些示例以帮助您入门。
答案 1 :(得分:1)
编辑:对于此用例,最好使用上面答案中提到的prepareRenderer。
您必须扩展JTable并覆盖
<!-- language: lang-java -->
getCellRenderer(int row, int column)
public class MyTable extends JTable
{
@Override
public TableCellRenderer getCellRenderer(int row, int column)
{
return new TableCellRenderer()
{
Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus,
int row, int column)
{
Component cellRenderComponent = this.MyTable.super.getCellRenderer(row, column);
if (getModel().getValue(row,column).toString().equalsIgnoreCase("true"))
{
cellRenderComponent.setBackground(Color.green);
}
else
{
cellRenderComponent.setBackground(Color.red);
}
}
}
}
}