[Resolvido]Duvida para implementar CellRenderer

Olá pessoal, estou tentando implementar um CellRenderer em minha jTable, estou usando uma jTabel com AbstractTableModel conforme recomendado pelo GUJ , a minha duvida é como realizar a chamada da classe CellRenderer quando eu carregar a minha jTable, alguem teria algum exemplo passo a passo para que possa entender melhor?
O objetivo seria colorir linhas da jTable de acordo com algum status que está na tabela.

SuajTable.setDefaultRenderer(Object.class, new SeuRenderizador());

Muito obrigado!
Deu certo agora é implementar a regra de negócio no cellrenderer

resposta do problema :
SuajTable.setDefaultRenderer(Object.class, new SeuRenderizador());

neste caso minha jTable tem um campo double, mas se eu fosse passar uma String como parametro para indicar se vai ou não colorir a linha, a chamada ficaria a mesma @josev.junior ?

Muito cuidado com isso, o CellRenderer é uma classe visual, não deveria haver regras de negócio implementadas nela.
Se você seguir por esse caminho, daqui há pouco vai ter um monstrinho pra cuidar e não um sistema.

Esse campo é mostrado na tabela?

obrigado @staroski mas quando digo ‘regra de negocio’ seria para que a classe entenda quando deve colorir a linha de acordo com o dado enviado, por exemplo: se o status for A pinte de verde se não pinte de vermelho.
Seria essa a minha intenção

1 curtida

Sim @josev.junior, ele é exibido na tabela.

Você pode usar o parâmetro value do método getTableCellRendererComponent para pegar o valor.

@josev.junior e como ficaria a minha chamada para passar este parametro?

fiz um teste aqui e parece que deu certo, de acordo com o valor que está na coluna está colorindo a linha normalmente, vou fazer mais testes e posto a solução no topico

Ficaria da mesma forma, você não precisa alterar nada pois o método já dá o necessário para implementar sua regra na jTable. Dê uma olhada no javadoc:
https://docs.oracle.com/javase/8/docs/api/javax/swing/table/TableCellRenderer.html

Se ajudar, também tem um exemplo que fiz há muito tempo atrás:
http://www.staroski.com.br/2014/12/17/criar-renderizador-jtable/
:slight_smile:

Dentro da classe CellRenderer fiz isto :
String teste = table.getModel().getValueAt(row, 5).toString();
ae recupero o valor da coluna e vejo qual cor ela terá

@staroski ajudou sim muito obrigado!, no meu projeto tenho várias tabelas, para rederizar várias tabelas eu teria que criar novos renderes ou posso usar apenas uma classe e criar outro método?

Como assim criar outro método?
A interface TableCellRenderer só define o método getTableCellRendererComponent.

@staroski eu gostaria de aproveitar a classe para trabalhar com outras jtable, mas desta forma será possível de acordo com o retorno estabelecido pelo método getTableCellRendererComponent, desta forma então caso seja necessário alguma particularidade seria correto então criar outra classe tableCellRenderer para implementar este método.

segue modelo de um parametro para colorir sua jtable
//crie um objeto color e determine a cor
Color c = Color.GREEN;
// especifica a linha para pegar o valor
Object text = table.getValueAt(row, 1);
// determine a condição para colorir
if (text != null && “SIM”.equals(text.toString()))
// determina a nova cor
c = Color.RED;
//retorna o valor desejado
comp.setBackground©;