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

Posted

技术标签:

【中文标题】使用 TableCellRender 设置 JTable 列和行的颜色【英文标题】:Set color of a JTable column and row with TableCellRender 【发布时间】:2011-10-14 17:07:00 【问题描述】:

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

【问题讨论】:

自定义渲染器是 the 小硬币,专为......好吧......在集合组件中自定义视觉效果 :-) 如果您需要比核心 Swingx 更强大和更可插入的支持,你可能想看看 SwingX 【参考方案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);
              

          
      
   


【讨论】:

-1 因为它完全是错误的(你肯定不想短路表的查找以找到合适的渲染器)【参考方案2】:

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

重写 JTable 的 prepareRenderer(...) 方法。

请参阅 Table Row Rendering 了解一些示例,帮助您入门。

【讨论】:

以上是关于使用 TableCellRender 设置 JTable 列和行的颜色的主要内容,如果未能解决你的问题,请参考以下文章

带有 Spring JTA 的休眠 5

WebLogic 非活动连接超时和 JTA 超时

使用Atomikos实现JTA分布式事务

如何在 Tomcat 6 中为 Hibernate 使用 JTA 支持?

Spring JTA事务配置JOTM

JTA 和本地事务有啥区别?