Mudar dor da linha da JTable

4 respostas Resolvido
jtablejava
L

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() {

<a class="mention" href="/u/override">@Override</a>

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

4 Respostas

S

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

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

/uploads/3X/a/9/a9608973bfdb400ec2e7c67b72c81d22e63b503a.png.webp

S
Solucao aceita

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

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:

Criado 4 de outubro de 2017
Ultima resposta 4 de out. de 2017
Respostas 4
Participantes 2