【问题标题】:Set color of a JTable column and row with TableCellRender使用 TableCellRender 设置 JTable 列和行的颜色
【发布时间】: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

标签: java swing colors jtable background-color


【解决方案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 了解一些示例,帮助您入门。

【讨论】:

    猜你喜欢
    • 2011-04-02
    • 2019-05-22
    • 2019-05-09
    • 1970-01-01
    • 2014-11-27
    • 1970-01-01
    • 2010-11-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多