选择后更改jtable中行的背景颜色

时间:2014-01-03 07:17:51

标签: java swing jtable

我正在尝试创建一个更改行背景的TableCellRenderer。我正在覆盖prepareRenderer,它会在选择时更改行的背景,但是一旦我更改选择,默认背景颜色(白色)将设置为上一个选定行,而较新的行将获得背景颜色(浅灰色)

这是我的代码:

final JTable table = new JTable(model)
    {
            @Override
        public Component prepareRenderer(TableCellRenderer renderer,int row,int column)
        {
            Component comp=super.prepareRenderer(renderer,row, column);
           int modelRow=convertRowIndexToModel(row);
           if(!isRowSelected(modelRow))
               comp.setBackground(Color.WHITE);
           else
               comp.setBackground(Color.LIGHT_GRAY);
           return comp;
        }
    };

我的输出屏幕:

enter image description here

我想这样做:

enter image description here

2 个答案:

答案 0 :(得分:1)

试试这个:

table.setDefaultRenderer(Object.class, new TableCellRenderer(){
        private DefaultTableCellRenderer DEFAULT_RENDERER =  new DefaultTableCellRenderer();


            @Override
            public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
                Component c = DEFAULT_RENDERER.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
                //table.setBackground(Color.YELLOW);
                 //table.setSelectionBackground(Color.YELLOW);
                if(isSelected){
                    c.setBackground(Color.YELLOW);
                }else{
                if (row%2 == 0){
                    c.setBackground(Color.WHITE);

                }
                else {
                    c.setBackground(Color.LIGHT_GRAY);
                }     }

                return c;
            }

        });

答案 1 :(得分:1)

根据您的要求,您可以执行以下操作:

在你的模型中保留一个隐藏的标志值列。假设您的隐藏列是5列,您可以按如下方式编码:

final JTable table = new JTable(model)
    {
            @Override
        public Component prepareRenderer(TableCellRenderer renderer,int row,int column)
        {
            Component comp=super.prepareRenderer(renderer,row, column);
           int modelRow=convertRowIndexToModel(row);
           if((Boolean)getValueAt(row,5))
               comp.setBackground(Color.LIGHT_GRAY);
           else
               comp.setBackground(Color.WHITE);
           return comp;
        }
    };

您的旗帜值包含布尔对象。