Estou criando um DefaultTableCellRenderer para pintar as células de uma coluna baseado no status da célula, o problema é que isso apenas funciona se eu clicar sobre a linha da tabela e não sei pq isso está acontecendo.
Como resolver isso ?
public class ContasCustomRenderer extends DefaultTableCellRenderer{
@Override
public Component getTableCellRendererComponent(JTable table,
Object value,
boolean isSelected,
boolean hasFocus,
int row,
int column) {
JLabel label = (JLabel)super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
Conta obj = ((ContaTableModel)table.getModel()).getObject(row);
if(!isSelected){
setBackground(Color.WHITE);
}else{
setBackground(Color.BLUE);
}
//pinta celula coluna 5 do status
if(column == 5 && obj.getStatus() == Status.ATIVO){
label.setBackground(Color.GREEN);
}
if(column == 5 && obj.getStatus() == Status.INATIVO){
label.setBackground(Color.RED);
}
//private String[] colunas = {"Num.Conta ", "Corretora ", "Tipo ", "Aporte ", "Ativo " , "Status "};
table.getColumnModel().getColumn(0).setPreferredWidth(100); //num.conta
table.getColumnModel().getColumn(1).setPreferredWidth(150); //corretora
table.getColumnModel().getColumn(2).setPreferredWidth(100); //tipo
table.getColumnModel().getColumn(3).setPreferredWidth(100); //aporte
table.getColumnModel().getColumn(4).setPreferredWidth(100); //ativo
table.getColumnModel().getColumn(5).setPreferredWidth(100); //status
label.setHorizontalAlignment(getAlinhamento(column));
return label;
}
private int getAlinhamento(int coluna){
switch (coluna) {
case 0:
return SwingConstants.CENTER;
case 1:
return SwingConstants.LEFT;
case 2:
return SwingConstants.CENTER;
case 3:
return SwingConstants.RIGHT;
case 4:
return SwingConstants.CENTER;
case 5:
return SwingConstants.CENTER;
default:
return SwingConstants.RIGHT;
}
}
}