【问题标题】:color selected row in jtable by another color用另一种颜色为 jtable 中的选定行着色
【发布时间】:2024-01-14 10:08:01
【问题描述】:

我使用这段代码为 ly jtable 的行着色不同的颜色:

table.setDefaultRenderer(Object.class, new DefaultTableCellRenderer()
    {
        @Override
        public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column)
        {
            final Component c = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
            c.setBackground(row % 2 == 0 ? Color.WHITE : Color.LIGHT_GRAY);

            return c;
        }
    });

它有效,现在我想将用户选择的行着色为不同于上述颜色的另一种颜色:

table.setSelectionBackground(Color.RED);

但它可以做任何事情 我怎样才能做到这一点?

提前谢谢你

【问题讨论】:

    标签: java swing jtable rendering selection


    【解决方案1】:

    您的渲染器正在覆盖DefaultTableCellRenderer 应用的颜色更改

    尝试类似...

    Component c = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
    if (!isSelected) {
        c.setBackground(row % 2 == 0 ? Color.WHITE : Color.LIGHT_GRAY);
    }
    

    相反

    【讨论】:

    • @simonTifo 如果有帮助,请接受并投票。
    【解决方案2】:

    您可以根据需要使用getSelectedRow()getSelectedColumn()。例如:

    public Component prepareRenderer(TableCellRenderer renderer, int row, int column) {
            Component comp = super.prepareRenderer(renderer, row, column);
            comp.setForeground(Color.BLACK); // Default colour of cell
            if (this.getSelectedRow() == row || this.getSelectedColumn() == column) return comp;
            else { 
              .... // Other formatting rules here
            }
    
            return comp;
    }
    

    【讨论】: