我认为prepareRenderer(...)引起了麻烦。我创建jTable的代码是:-

jTable1 = new javax.swing.JTable(){
public Component prepareRenderer(TableCellRenderer renderer, int row, int column)
{
    Component c = super.prepareRenderer(renderer, row, column);
    if(column==0){
        c.setBackground(new java.awt.Color(223, 223, 223));
        c.setForeground(new Color(121, 63, 63));
        c.setFont(new java.awt.Font("Tahoma", java.awt.Font.BOLD, 12));
    }else{
        c.setBackground(new java.awt.Color(235, 235, 235));
        c.setFont(new java.awt.Font("Tahoma", java.awt.Font.PLAIN, 12));

    }
    return c;
}
};


现在,当我使用:-

    jTable1.setSelectionBackground(Color.BLACK);


这没用。知道如何解决吗?

编辑:完全删除prepareRenderer(...)方法后,我测试了程序,我可以进行黑色选择

最佳答案

这是DefaultTableCellRenderer的代码片段

    if (isSelected) {
        super.setForeground(fg == null ? table.getSelectionForeground()
                                       : fg);
        super.setBackground(bg == null ? table.getSelectionBackground()
                                       : bg);
    }


如您所见,选择背景设置为渲染器(实际上在您的调用super.prepareRenderer(renderer,row,column)中)

之后,您可以根据列将背景重置为一种颜色。但是,无论哪个列号,您实际上都会替换选择背景。

如果column!= 0调用

c.setBackground(getSelectionBackground());

10-05 18:10