重写Component时选择行JTable

时间:2015-08-12 04:08:43

标签: java swing jtable

我根据特定条件更改JTable中单元格的背景颜色。为此,我要覆盖Component。颜色可以正常工作,但是在选择单元格之前,整个行都会突出显示,但现在只显示单元格被选中。如何启用行选择?

代码

JTable table = new JTable(model){
             @Override
                public Component prepareRenderer(TableCellRenderer renderer, int rowIndex,
                        int columnIndex) {
                    JComponent component = (JComponent) super.prepareRenderer(renderer, rowIndex, columnIndex);  

                    if(getValueAt(rowIndex, 0).toString().equalsIgnoreCase("cancel") && columnIndex == 0) {
                        component.setBackground(Color.RED);
                    } else if(getValueAt(rowIndex, 0).toString().equalsIgnoreCase("new") && columnIndex == 0){
                        component.setBackground(Color.GREEN);
                    }
                    else if(getValueAt(rowIndex, 0).toString().equalsIgnoreCase("trade") && columnIndex == 0){
                        component.setBackground(Color.WHITE);
                    }
                    else if(columnIndex == 0){
                        component.setBackground(Color.ORANGE);
                    }
                    else if(columnIndex == 12) {


                        if (positions.get(getValueAt(rowIndex, 1)).toString().equals(getValueAt(rowIndex, 12)) && !getValueAt(rowIndex, 0).toString().equalsIgnoreCase("new")) {
                            component.setBackground(Color.LIGHT_GRAY);
                        }
                        else {
                            component.setBackground(Color.WHITE);
                        }
                    }
                    else {
                        component.setBackground(Color.WHITE);
                    }

                    return component;
                }
        };

我尝试过但没有工作

table.setRowSelectionAllowed(true);

1 个答案:

答案 0 :(得分:0)

感谢@MadProgrammer的评论。我设法通过仅选中设置颜色来解决此问题,如果没有选择行。

if (!isRowSelected(rowIndex)) {

// set colors...

}