Melhor incicilização de componente em CellEditor e CellRenderer

Criei duas classes: a primeira estende AbstractCellEditor e a outra, DefaultTableCellRenderer, onde elas não inicializam seu componente no contrutor, e sim em seus métodos getTableCellEditorComponent(…) e getTableCellRendererComponent(…), pois o componente é escolhido de acordo com o objeto na célula da tabela em questão (ou um JCheckBox, quando o objeto é um boolean, ou um JTextField, quando o objeto é um String).
Faço isso pois não se sei qual objeto está na célula, evitando incialização desnecessária no construtor (por exemplo, a tabela pode somente ter Strings, e iniciar o JCheckBox no contrutor seria desnecessário).

Porém, não entendo como funciona a instanciação do componente: somente um componente é usado em todas as células da tabela, mesmo iniciando o componente várias vezes em cada execução dos métodos descritos lá em cima? Ou são várias instâncias criadas, isto é, seria melhor ter incializado o componente no contrutor? :-o

logo abaixo…

Acho que se vc está instanciando no método getTableCellEditor, creio eu que pra cada chamada do método, irá existir uma instancia do objeto na memoria. Só que como se trata de um renderer, ele irá utilizar essa instancia somente para “pintar” na JTable, pois o que vc vê não é a instancia e sim uma “pintura” dela. Logo, ela é descartada rapidamente.

Vc poderia ter uma variavel de classe no seu cellrenderer, e inicializa-la somente uma vez: no proprio metodo get…Component vc pode ver se ja instanciou um novo componente. E deixe instanciado lá na variavel da classe. Da proxima vez, ja vai estar criado, vc pode usa-la de novo.

Mas a melhro forma, não sei. acho que poderia ser a de ter uma variavel de classe e retorna-la com o valor correto. Mas fica a seu criterio.

Se disse alguma coisa errada, comentem.

Flw!

Consertei aqui, é só definir um “if” para ver se o componente editor e renderer é nulo ou não…