[Resolvido]Duvida para implementar CellRenderer

18 respostas Resolvido
desenvolvimentojava
S

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.

18 Respostas

J

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

S

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

S

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

S

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 ?

S

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.

J

Esse campo é mostrado na tabela?

S

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

S

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

J

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

S

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

S

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

J

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

S

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:

S

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á

S

@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?

S
Solucao aceita

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

S

@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.

A
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©;
Criado 1 de março de 2017
Ultima resposta 2 de mar. de 2017
Respostas 18
Participantes 4