Perdendo referência a item do JTable

4 respostas
PauloBrito

Em um trecho de código, busco um item selecionado em um JTable, crio um clone dele, para depois atribuir o clone à esta variável buscada. Como a seguir:

Item item = tbServicos.getSelectedItem();
Item clone = (Item) item.clone();

// Chama o editor do item
ItemEditor itemEditor = itemEditorFactory.create(item);
itemEditor.setItem(clone);

// Se tudo ok, atribui o clone ao item, consolidando a modificação.
// Se não, o clone é descartado.
if (itemEditor.editar())
   item = clone;

if (item == clone)
   System.out.println("são iguais!");

if (item == tbServicos.getSelectedItem())
   System.out.println("são iguais 2");

Se a edição for confirmada, o texto “São iguais!” é impresso, porém, o item no JTable não é atualizado! O texto “São iguais 2” não é impresso.

O que acontece?

4 Respostas

T

Para comparar 2 objetos, use equals, não “==” (exceto no caso em que você quer comparar algo contra “null”).

PauloBrito

É que nesse caso eu estou tentando saber se as variáveis se referem ao exato mesmo objeto. Se eu usar o equals aqui, os textos serão impressos, porém o problema continua, ou seja, o item no JTable não é atualizado.

PauloBrito

Já entendi o que acontece. Existem 2 objetos (oA e oB) e 3 referências (r1, r2 e r3). Inicialmente, r1 e r2 apontam para oA e r3 para oB. O que meu código faz é apontar r2 para oB, o que não quer dizer que r1 também irá.

Obrigado, thingol, mais uma vez! Ao responder sua afirmação que me dei conta do problema.

PauloBrito

Só pra complementar, se eu tivesse alterado o conteúdo da variável “item”, o resultado seria o esperado.

Criado 13 de maio de 2009
Ultima resposta 13 de mai. de 2009
Respostas 4
Participantes 2