Mudar dor da linha da JTable

oi galera estou com um pequeno problema.

SE PUDEREM ME DAR UMA AJUDA AGRADEÇO!

tenho um cod. que pinta a linha especifica da JTable dependendo de uma condição na coluna Status

porem meu cod. só pinta a cédulas que tem string e não as que tem números.

segue o código a baixo.

//---------------------------------------

masterTable.setDefaultRenderer(Object.class, new DefaultTableCellRenderer() {
@Override
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int column) {
super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
//A coluna do status é 10
Object ref = table.getValueAt(row, 10);//Coluna Status
//Coloca cor em todas as linhas,COLUNA(3) que tem o valor “Conciliar ou OK”
if (ref != null && ref.equals(“Conciliar”)) {//Se Status for igual a “Conciliar”
setBackground(Color.RED);//Preenche a linha de vermelho
setForeground(Color.WHITE);//E a fonte de branco
} else {
boolean sel = isSelected;
if (sel == true) {
setBackground(getBackground());
setForeground(getForeground());
} else {//Se Status não for “Aberto”
setBackground(Color.WHITE);//Preenche a linha de branco
setForeground(new Color(51, 51, 51));//E a fonte de preto
}
}
return this;
}

});
    //---------------------------------------

imagem da JTable

Creio que assim resolva sua necessidade:

masterTable.setDefaultRenderer(Object.class, new DefaultTableCellRenderer() {

    @Override
    public Component getTableCellRendererComponent(JTable table,
                                                   Object value,
                                                   boolean isSelected,
                                                   boolean hasFocus,
                                                   int row,
                                                   int column) {
        Component renderizador = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
        Object status = table.getValueAt(row, 10);
        if ("Conciliar".equals(status)) {
            renderizador.setBackground(Color.RED);
            renderizador.setForeground(Color.WHITE);
        } else if (!isSelected) {
            renderizador.setBackground(Color.WHITE);
            renderizador.setForeground(new Color(51, 51, 51));
        }
        return renderizador;
    }
});

meu amigo continua preenchendo só a cédulas da tabela que tem letras as com números não estão preenchendo.

http://www.guj.com.br/uploads/default/original/3X/a/9/a9608973bfdb400ec2e7c67b72c81d22e63b503a.png

Deve ser por causa do tipo das colunas, não sei como você implementou seu TableModel.

Provavelmente setando o mesmo renderizador para colunas numéricas deve resolver:

DefaultTableCellRenderer renderizador = new DefaultTableCellRenderer() {

    @Override
    public Component getTableCellRendererComponent(JTable table,
                                                   Object value,
                                                   boolean isSelected,
                                                   boolean hasFocus,
                                                   int row,
                                                   int column) {
        Component componente = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
        Object status = table.getValueAt(row, 10);
        if ("Conciliar".equals(status)) {
            componente.setBackground(Color.RED);
            componente.setForeground(Color.WHITE);
        } else if (!isSelected) {
            componente.setBackground(Color.WHITE);
            componente.setForeground(new Color(51, 51, 51));
        }
        return componente;
    }
};

masterTable.setDefaultRenderer(String.class, renderizador);
masterTable.setDefaultRenderer(Double.class, renderizador);
masterTable.setDefaultRenderer(Integer.class, renderizador);
1 curtida

muito obrigado!
deu certo meu codigo ficou assim

public void colorir(){

  DefaultTableCellRenderer renderizador = new DefaultTableCellRenderer() {

@Override
public Component getTableCellRendererComponent(JTable table,
                                               Object value,
                                               boolean isSelected,
                                               boolean hasFocus,
                                               int row,
                                               int column) {
    Component componente = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
    Object status = table.getValueAt(row, 10);
    if ("Conciliar".equals(status)) {
        componente.setBackground(Color.RED);
        componente.setForeground(Color.WHITE);
    } else if (!isSelected) {
        componente.setBackground(Color.WHITE);
        componente.setForeground(new Color(51, 51, 51));
    }
    return componente;
}

};
masterTable.setDefaultRenderer(String.class, renderizador);
masterTable.setDefaultRenderer(Double.class, renderizador);
masterTable.setDefaultRenderer(Integer.class, renderizador);
masterTable.setDefaultRenderer(Exercicio.class, renderizador);
masterTable.setDefaultRenderer(Mes.class, renderizador);
masterTable.setDefaultRenderer(Conta.class, renderizador);

:+1:

1 curtida