Java 为JTable中的列中的单元格着色

Java 为JTable中的列中的单元格着色,java,swing,jtable,Java,Swing,Jtable,我目前有一个由7列和多行数据组成的JTable 我如何给第7列中的每个单元格着色?我想根据单元格内的数据着色 所以如果第7列中的一个单元格低于0,那么我想把它涂成红色,或者如果第7列中的一个单元格大于0,那么把它涂成绿色等等 谢谢您可以使用TableCellRenderer为表格中的各个单元格创建这些自定义样式。这就解释了一些细节。在该页面上有一个使用颜色渲染器的示例,该渲染器可能是您需要的起点。覆盖prepareRenderer()方法初始化表对象时,将特定条件放入相应的颜色更改中,然后颜色更

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

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

所以如果第7列中的一个单元格低于0,那么我想把它涂成红色,或者如果第7列中的一个单元格大于0,那么把它涂成绿色等等


谢谢

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

覆盖
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;
    }
};
table=新JTable(型号)
{
公共组件预处理器(TableCellr、int行、int列)
{
组件组件=超级制备程序(r,行,列);
如果(列==6&&!isCellSelected(行,列))
{
if(表getValueAt(行,列)<0)
公司背景(红色);
其他的
公司背景(颜色为绿色);
}  
返回补偿;
}
};

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

@lapper Ehhh。。(耸耸肩)我只想进入下一个问题。@AndrewThompson你是对的。对不起,我刚刚学会了如何做,从现在开始我会这么做。虽然可行,但我不建议在这个需要在特定列上进行视觉装饰的用例中使用它:这是自定义渲染器设计用来处理的“轻量级”任务。另一方面,表重写是一种“重量级”度量:请记住,作为一般规则,JSomething不应因应用程序需要而扩展,它们是专门为使用而设计的。@kleopatra感谢您的建设性意见。我将尝试在即将发布的问题上使用此评论。