【问题标题】:Color cells in a column in a JTableJTable 中列中的单元格颜色
【发布时间】:2012-03-03 17:24:50
【问题描述】:

我目前有一个由 7 列和多行数据组成的 JTable。

如何为第 7 列中的每个单元格着色?我想根据单元格内的数据着色。

因此,如果第 7 列中的一个单元格低于 0,那么我想将其涂成红色,或者如果第 7 列中的一个单元格大于 0,则将其涂成绿色等。

谢谢

【问题讨论】:

  • @deporter Ehhh..(耸耸肩)我只是继续下一个问题。
  • @AndrewThompson 你是对的。
  • 对不起,我刚刚学会了如何做,从现在开始。

标签: java swing jtable


【解决方案1】:

您可以使用 TableCellRenderer 为表格中的单个单元格创建这些自定义样式。这个tutorial 解释了一些细节。在该页面上是一个使用颜色渲染器的示例,这可能是您需要的开始。

【讨论】:

    【解决方案2】:

    在您初始化表格对象时重写prepareRenderer() 方法,将您的特定条件相应地更改颜色,然后颜色更改将按照您的定义反映在您的应用程序中。假设您有一个全局 JTable 变量 table 并让 model 成为您的 DefaultTableModel 实例:

    table = new JTable( model )
    {
        public Component prepareRenderer ( TableCellRenderer r, int row, int col )
        {
            Component comp = super.prepareRenderer( r, row, col );
            if ( col == 6 && !isCellSelected( row, col ) )
            {
                if ( table.getValueAt( row, col ) < 0 )
                    comp.setBackground( Color.RED );
                else
                   comp.setBackground( Color.GREEN );
            }  
            return comp;
        }
    };
    

    上面的代码正在检查col == 6,因为您想对第 7 列进行着色,该列对应于列索引 6(它从 0 开始)。在内部 if 语句中,它正在检查单元格值并相应地更改单元格背景颜色。

    【讨论】:

    • 虽然可行,但我不建议在这个需要在特定列上进行视觉装饰的用例中使用它:这是自定义渲染器旨在处理的“轻量级”任务。另一方面,表覆盖是一种“重量级”措施:请记住 - 作为一般规则 - JSomething 根本不应该为应用程序需求而扩展,它们是为使用而设计的。
    • @kleopatra 感谢您的建设性评论。我将尝试将此评论用于即将发布的问题。
    猜你喜欢
    • 2012-10-03
    • 2011-08-14
    • 2015-11-29
    • 2014-08-24
    • 1970-01-01
    • 2011-08-06
    • 2011-11-03
    • 2017-09-11
    • 1970-01-01
    相关资源
    最近更新 更多