JTable Set Cell Color At Specific Value

大憨熊 提交于 2019-11-29 14:33:58

问题


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.

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.

    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:


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.

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



来源:https://stackoverflow.com/questions/25080951/jtable-set-cell-color-at-specific-value

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!