Cor das células de um JTable

4 respostas
RichardVaugh

Pessoal, boa noite !

Preciso fazer uma tabela que a cada mudança de determinada coluna mude a cor das células.
Até aí tudo bem.
Acontece que fiz uns exemplos (criando uma classe que herda de DefaultTableCellRenderer) mas o cellrenderer fica alterando a cor de fundo enquanto eu seleciono as
células ou navego na tabela com o scroll.

Alguém pode me dar uma sugestão de como resolvo isso ?
Estou pesquisando sobre como posso remover o cellrenderer após ele ‘pintar’ uma vez a tabela.
Será que isso resolveria ?

Qualquer sugestão de pesquisa ajuda muito.

4 Respostas

davidtiagoconceicao

Acredito que o problema na verdade seja com o renderer que você criou. Acho que removê-lo não vai ser a melhor solução.
Sugiro que faça algum tratamento usando o parâmetro isSelected e verifique se as variáveis que o renderer usa para definir as cores não estão mudando conforme o scroll.
Caso os problemas continuem, poste seu código.

RichardVaugh

pois é, meu código é simples, eu só verifico se o valor da célula anterior de determinada coluna alterou, se alterou eu pego a cor daquela celula e ‘inverto’.
caso contrário eu copio…

assim:

public class ColorCellRenderer extends DefaultTableCellRenderer
{
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);

if (table.getValueAt(x,x) != Y){

coloca azul 
} else {
verificar a cor de table.getComponentAt(x,x).getBackground() e coloco uma cor diferente...
}

}

return componente;
}
}

acontece que eu não entendi muito bem como funciona esse processo de pintar as células em um jtable, estou pesquisando sobre isso.
quando eu uso o scroll do jscrollpane em direção a base da tabela ele pinta direito, mas se eu oscilar ele pinta errado.
deve existir alguma forma de ativar um evento para pintar corretamente, pois ele deixa células pintadas pela metade…

davidtiagoconceicao

O que é a variável Y?
Acredito que seu problema esteja nesta comparação de getValueAt com Y.
Sugiro que teste em que condição o programa entra durante o scroll.
Se ficar muito difícil de fazer isso com breakpoint, coloque mensagens de sysout do tipo “entrou no if”.

Mais informações sobre renderer:

http://java.sun.com/docs/books/tutorial/uiswing/components/table.html#renderer

RichardVaugh

Pois é, como eu imaginava o renderer é chamado em todo instante que há movimento em jtable, selecão e tudo mais…
sobre o meu X e Y eu uso na verdade as próprias variáveis que recebo no método…

table.getValueAt(row-1, colunaQueQueroVerificarValor)

Criado 16 de junho de 2009
Ultima resposta 19 de jun. de 2009
Respostas 4
Participantes 2