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

Java 使用TableCellRender设置JTable列和行的颜色,java,swing,colors,jtable,background-color,Java,Swing,Colors,Jtable,Background Color,我想知道是否可以在不定义自己的自定义TableCellRender的情况下设置指定的行和列颜色 目前我正在使用这个代码 TableCellRenderer cellRenderer = this.devicePropertyTable.getCellRenderer(1, 1); Component cellRenderComponent = cellRenderer.getTableCellRendererComponent(this.devicePropertyTable, "", fals

我想知道是否可以在不定义自己的自定义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的情况下执行此操作?

编辑:对于此用例,最好使用上面回答中提到的PrepareRender

您必须扩展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);
              }

          }
      }
   }

}

getCellRenderer(int行,int列)
公共类MyTable扩展了JTable
{
@凌驾
公共TableCellRenderer getCellRenderer(int行,int列)
{
返回新的TableCellRenderer()
{
组件GetTableCellRenderComponent(JTable表、对象值、,
布尔值为已选,布尔值为焦点,
整数行,整数列)
{
Component cellRenderComponent=this.MyTable.super.getCellRenderer(行、列);
if(getModel().getValue(行、列).toString().equalsIgnoreCase(“true”))
{
cellRenderComponent.setBackground(颜色:绿色);
}
其他的
{
cellRenderComponent.setBackground(颜色:红色);
}
}
}
}
}

编辑:对于这个用例,最好使用上面答案中提到的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);
              }

          }
      }
   }

}

getCellRenderer(int行,int列)
公共类MyTable扩展了JTable
{
@凌驾
公共TableCellRenderer getCellRenderer(int行,int列)
{
返回新的TableCellRenderer()
{
组件GetTableCellRenderComponent(JTable表、对象值、,
布尔值为已选,布尔值为焦点,
整数行,整数列)
{
Component cellRenderComponent=this.MyTable.super.getCellRenderer(行、列);
if(getModel().getValue(行、列).toString().equalsIgnoreCase(“true”))
{
cellRenderComponent.setBackground(颜色:绿色);
}
其他的
{
cellRenderComponent.setBackground(颜色:红色);
}
}
}
}
}
我想知道是否可以在不定义自己的自定义TableCellRender的情况下设置指定的行和列颜色

重写JTable的prepareRenderer(…)方法

请参阅,以获取一些示例,帮助您开始学习

我想知道是否可以在不定义自己的自定义TableCellRender的情况下设置指定的行和列颜色

重写JTable的prepareRenderer(…)方法

请参阅,以获取一些示例,帮助您入门。

-1因为它完全错误(您确实不想对适当的渲染器短路表的查找)-1因为它完全错误(您确实不想对适当的渲染器短路表的查找)自定义渲染器是为。。。好。。定制集合组件中的视觉效果:-)如果您需要比核心Swingx更强大、更可插拔的支持,您可能希望了解SwingXcustom渲染器是为以下目的设计的小硬币。。。好。。在集合组件中定制视觉效果:-)如果您需要比核心Swingx更强大、更可插拔的支持,您可能希望了解Swingx