[Resolvido]Duvida para implementar CellRenderer

18 respostas Resolvido
desenvolvimentojava
shodaime

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());

shodaime

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

shodaime

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

shodaime

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 ?

staroski

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?

shodaime

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

shodaime

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

J

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

shodaime

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

shodaime

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

staroski

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:

shodaime

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á

shodaime

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

staroski
Solucao aceita

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

shodaime

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

Arconi
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