JTable将单元格颜色设置为特定值

Posted

技术标签:

【中文标题】JTable将单元格颜色设置为特定值【英文标题】:JTable Set Cell Color At Specific Value 【发布时间】:2014-09-24 16:47:38 【问题描述】:

我正在尝试编写一种方法,该方法针对给定的参数(值、颜色),在值等于 cellValue 的单元格的背景上设置颜色。

我的方法实际上做的是,它为整行设置单元格的背景颜色,当我选择表格上的行时,我希望方法只在特定列设置颜色(其中 cellValue 等于 value ) 每次我调用该方法时。

    void setCellBackgroundColor(boolean cellValue, final Color color) 
        List<List<Object>> data = tView.getTTableModel().getData();

        for (int row = 0; row < data.size(); row++) 
            for (int col = 0; col < data.get(row).size(); col++) 
                TableCellRenderer renderer = tView.table.getCellRenderer(row, Col);
                Component component = tView.table.prepareRenderer(renderer, row, col);
                boolean bValue = 
                    TDataTypeRenderer.parseIntoRealValue(
                        data.get(row).get(col)
                    )
                );
                if (bValue == cellValue) 
                    component.setBackground(color);
                
    

【问题讨论】:

和 prepareRenderer 是好的和适当的可能方式(具有列和行坐标),但它是覆盖 JTables 方法的一部分,不会在行和列内循环,结果渲染器(prepareRenderer)应该只是一个实例在视图内循环,注意 prepareRenderer 讨厌空的 JTables 视图,必须在调用被绘制之前测试行 > 0 【参考方案1】:

当我选择表格上的行时,我希望方法只在特定列设置颜色

按照@mKorbel 的建议尝试覆盖prepareRenderer() 方法。

示例代码:

Object[] columnNames =  "A", "B", "C", "D" ;
Object[][] data =  
         "abc", new Double(850.503), 53, true ,
         "lmn", new Double(36.23254), 6, false , 
         "pqr", new Double(8.3), 7, false ,
         "xyz", new Double(246.0943), 23, true  ;

JTable table = new JTable(data, columnNames) 
    @Override
    public Component prepareRenderer(TableCellRenderer renderer, int row, int col) 
        Component comp = super.prepareRenderer(renderer, row, col);
        Object value = getModel().getValueAt(row, col);
        if (getSelectedRow() == row) 
            if (value.equals(false)) 
                comp.setBackground(Color.red);
             else if (value.equals(true)) 
                comp.setBackground(Color.green);
             else 
                comp.setBackground(Color.white);
            
         else 
            comp.setBackground(Color.white);
        
        return comp;
    
;

选定的第一行:

选定的第二行。

Read more...


编辑

根据您的最后评论

是否可以在不点击(选择)表格行的情况下更改颜色?

是的,只需删除对选定行的检查。

    Object value = getModel().getValueAt(row, col);
    if (value.equals(false)) 
        comp.setBackground(Color.red);
     else if (value.equals(true)) 
        comp.setBackground(Color.green);
     else 
       comp.setBackground(Color.white);
    

【讨论】:

prepareRenderer 是好的和正确的方法,OP 问题是她/他的代码在 JTables 视图中循环并添加一堆渲染器 谢谢大家,现在我明白问题出在哪里了。 @Xerath 我已更新我的代码以仅选择所选行的单元格。 嘿嘿,但这只是在我点击表格时才选择的。是否可以在不单击(选择)表格行的情况下更改颜色? 谁能告诉我如何在 Netbeans GUI Builder 中使用它?我知道如何使用自定义代码。但似乎无法解决。

以上是关于JTable将单元格颜色设置为特定值的主要内容,如果未能解决你的问题,请参考以下文章

JTable 单元格颜色

Java - Jtable - 不同颜色的单元格

DataGridViewLinkColumn单元格单击后,字体颜色改变

设置全日历单元格背景颜色

更改单元格颜色而不更改其他单元格中的颜色(Jtable)

如何使用java为ods文件中的特定单元格添加颜色