Ajuda com cor na linha no jTable

Bom dia Pessoal…

Gostaria de uma ajuda de vocês, eu tenho esse codigo:

[code]
private void mudaCorItemCancelado(final int linha){
coTableListaCompras.setDefaultRenderer(Object.class, new DefaultTableCellRenderer() {
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int column) {
super.getTableCellRendererComponent(table, value, isSelected,
hasFocus, row, column);

            if (row == linha) {  
                setBackground(Color.ORANGE);
            }
            
            else {  
                setBackground(null);  
            }
            return this;  
        }  
    });
}[/code]

Eu faço com que apos o usuario selecionar a linha ela fica com a cor laranja, até ai tudo bem…
a linha está ficando laranja, porem fica apenas uma linha da jtable…

porem se o usuario selecionar outra linha… a linha anterior que estava laranja passa a fica branca novamente …
e a ultima linha que o usuario selecionou fica laranja…
mas eu gostaria que conforme o usuario vai escolhendo a linha elas vao ficando laranja…

eu chamo esse metodo assim:

alguem tem alguma dica de como eu posso fazer isso?

agradeço desde já…

abraço

Então você precisa passar o índice de todas as linhas selecionadas:

[code]
private void mudaCorItemCancelado(int[] linhas){
//Cria um set com todas as linhas
final Set<Integer> linhaSet = new HashSet();
for (int linha : linhas) {
linhaSet.add(linha);
}

//Define o renderer
coTableListaCompras.setDefaultRenderer(Object.class, new DefaultTableCellRenderer() {
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int column) {
super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
setBackground(linhaSet.contains(row) ? Color.ORANGE : null);
return this;
}
});
}[/code]

E na hora de usar, use o método no plural:

Meu caro, eu acredito que o bloco que esteja tornando a lniha anterior branca novamente seja o do else:

#else {    
#     setBackground(null);    
#} 

então se você comendar este bloco acredito que a linha anteriormente selecionada continuará laranja. Teste e relate se deu certo.

Espero que seja isso.

A linha anterior que estava laranja não fica mais laranja, porque você está pintando somente a linha que você recebeu por parâmetro.

if (row == linha) {     
                    setBackground(Color.ORANGE);   
                }

Assim, as outras linhas, ficarão todas com a cor default novamente.´

Acredito que, mesmo você retirando o código

else {     
                    setBackground(null);     
                }   
                return this;

irá continuar não pintando as duas linhas de laranja.

Talvez a forma correta é como o ViniGodoy mostrou.

Abraço!

Primeiramente… muito obrigadu ViniGodoy

Era isso mesmo que eu queria :lol:

=============================

saninaimayer
ali diz que se o resto das linhas tem que ser default…
se não é a que eu to querendo mudar a cor, as outras vao ser brancas … e tal…
ali eu não poderia mudar…

e…

criador

Pois é… ainda bem que a solução do Vini deu certo…

se eu apenas tirar o

else { setBackground(null); } return this;
A minha jTable toda fica em laranja…

bom eh isso…

Vlw ai Pessoal…

abraço