简体   繁体   English

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

[英]JTable Set Cell Color At Specific Value

I'm trying to write a method which for given parameters (value, color), sets color on the background of a cell which has value equal to cellValue. 我正在尝试编写一个方法,该方法对于给定的参数(值,颜色),在具有等于cellValue的值的单元格的背景上设置颜色。

What my method actually does is, it sets color on the background of a cells for whole row and when I select the row on the table, and I want method to only set color at specific column (where cellValue is equal to value) each time I call the method. 我的方法实际上做的是,它为整行的单元格的背景设置颜色,当我选择表格上的行时,我希望方法只在每次特定列(其中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);
                }
    }

when I select the row on the table, and I want method to only set color at specific column 当我选择表上的行时,我希望方法只在特定列设置颜色

Try with overridden prepareRenderer() method as suggested by @mKorbel. 尝试使用prepareRenderer()建议的重写prepareRenderer()方法。

sample code: 示例代码:

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

When selected first row: 选择第一行时:

在此输入图像描述

When selected second row. 当选择第二行时。

在此输入图像描述

Read more... 阅读更多...


EDIT 编辑

As per your last comment 根据你上次的评论

Is it possible to change color with out clicking (selecting) row on the table? 是否可以通过单击(选择)表格上的行来更改颜色?

Yes just remove the check of selected row. 是的,只需删除所选行的检查。

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

在此输入图像描述

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM