使用TableCellRender设置JTable列和行的颜色

时间:2011-07-27 23:31:22

标签: java swing colors jtable background-color

我想知道是否可以设置指定的行和列颜色而不定义我自己的自定义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的情况下执行此操作?

2 个答案:

答案 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);
              }

          }
      }
   }

}