JTable设置特定值的单元格颜色

时间:2014-08-01 13:04:45

标签: java swing jtable tablecellrenderer

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

我的方法实际上是做什么的,它在整行的单元格背景上设置颜色,当我在表格上选择行时,我希望方法只在特定列设置颜色(其中cellValue等于值)每次我打电话给这个方法。

    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);
                }
    }

1 个答案:

答案 0 :(得分:9)

  

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

尝试使用@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;
    }
};

选择第一行时:

enter image description here

选择第二行时。

enter image description here

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);
    }

enter image description here