有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java setSelectionBackGround()不在jTable中设置颜色

我认为是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(...)方法后,我测试了该程序,可以进行黑色选择


共 (2) 个答案

  1. # 1 楼答案

    终于找到了解决办法

    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{
        setBackground(new java.awt.Color(235, 235, 235));//c.setBackground(..) was the problem
        c.setFont(new java.awt.Font("Tahoma", java.awt.Font.PLAIN, 12));
    
    }
    return c;
    }
    
  2. # 2 楼答案

    这是DefaultTableCellRenderer的代码片段

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

    正如您所见,选择背景设置为渲染器(实际上是在调用super.prepareRenderer(渲染器、行、列))中)

    之后,您只需根据列将背景重置为其中一种颜色。但无论哪一列编号,实际上都会替换选择背景

    如果列=0呼叫

    c.setBackground(getSelectionBackground());