Ajuda com cor na linha no jTable

4 respostas
L

Bom dia Pessoal...

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

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

mudaCorItemCancelado(coTableListaCompras.getSelectedRow());

alguem tem alguma dica de como eu posso fazer isso?

agradeço desde já...

abraço

4 Respostas

ViniGodoy

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

private void mudaCorItemCancelado(int[] linhas){
   //Cria um set com todas as linhas
   final Set&lt;Integer&gt; linhaSet = new HashSet<Integer>();
   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;  
      }  
   });
}
E na hora de usar, use o método no plural:
mudaCorItemCancelado(coTableListaCompras.getSelectedRows());
saninaimayer

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.

criador

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!

L

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

Criado 14 de outubro de 2009
Ultima resposta 14 de out. de 2009
Respostas 4
Participantes 4