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);

это не работает. Есть идеи, как это исправить?

EDIT: я протестировал программу после полного удаления метода prepareRenderer(...), и я смог сделать черный выбор


person Deval Khandelwal    schedule 03.12.2014    source источник
comment
переопределить isSelected/HasFocus, те же методы, что и для стандартного рендерера, но не требуется в качестве параметра для prepareRenderer   -  person mKorbel    schedule 03.12.2014
comment
@mKorbel, пожалуйста, прочтите правку   -  person Deval Khandelwal    schedule 03.12.2014


Ответы (2)


Это фрагмент кода из DefaultTableCellRenderer.

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

Как вы можете видеть, фон выделения установлен для средства визуализации (на самом деле в вашем вызове super.prepareRenderer(renderer, row, column))

После этого вы просто сбрасываете фон на один из цветов в зависимости от столбца. Но независимо от того, какой номер столбца, вы фактически заменяете фон выбора.

если столбец!=0 вызов

c.setBackground(getSelectionBackground());
person StanislavL    schedule 03.12.2014

Наконец нашел решение...

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;
}
person Deval Khandelwal    schedule 03.12.2014
comment
Компонент c является родителем AWT, но все, что передано JComponent, например. JComponent jc = (JComponent) c;, aaach - person mKorbel; 03.12.2014