Bom, acredito que o problema esteja ocorrendo pq vc precisa sobrescrever o método equals do seu objeto dizendo o que vc considera para que dois objetos sejam iguais.
Não sei se o Hibernate faz algo pra vc relacionado a isso…mas acho que esse é o problema
Amigo, quando você compara objetos em java usando == o que você está comparando é o endereço de memória dos objetos, não seus conteúdos. Para comparar o conteúdo (ou estado) dos objetos, você precisa utilizar o método equals(), fornecido pelo classe “pai” de todas, o Object. Mas é só isso? Não!
Como a JVM vai saber, para um objeto que você mesmo criou, o que é igual e o que não é? Simples! Você reescreve o método equals na sua classe!
Para fazer isso, você deve seguir algumas regrinhas. Sejam 3 objetos da mesma classe, ‘a’, ‘b’ e ‘c’:
Se a.equals(b), então b.equals(a) também deve ser verdadeiro.
Agora, se seu ID foi definido como String e não como um tipo primitivo (como int), dai vc tem outro problema, porque fazer obj.getId() == this.id também irá comparar endereços de memória, visto que Strings são objetos! Então neste caso, dentro do equals, vc teria que comparar assim:
int ou Integer, note que int é um tipo primitivo e Integer vai se referir a um objeto da classe Integer.
Se for Integer, fazer o que marcelo_mococa disse é tentar verificar se os dois objetos são os mesmos e acredito que você esteja querendo saber se o conteúdo é igual.
Se quiser verificar o conteúdo de dois objetos Integer utilize o método equals, assim como em String, ou seja, troque a sua comparação por:
obg pela auda de todos, estou com uma seguinte duvida agora q nao consigo pensar em como fazer a uma semana jah
o problema eh o seguinte:
eu tenho um campo em q a pessoa precisa digitar um codigo de um carro, so q como existe uns 10 mil carros eh impossivel decorar todos, oq fiz foi o seguinte:
colokei um botao do lado q abre um jtable em um novo jframe sem fechar o anteriro, com duas colunas do codigo e do nome do carro do qual a pessoa poderia selecionar e apertar escolher.
oq gostaria q acotnecesse qd apertasse escolher era q essa jframe do jtable fechasse e inseri-se o codigo q estava selecionado no jtextfield. como posso fazer isso?
Cara, eu usava muito recursos desse tipo no DELPHI (que saudade). Como eu normalmente fazia ? bem… eu atribuia o valor selecionado a tag do Formulario daí na volta do formulario antes de dar o dispose nele eu recuperava esse valor, no delphi isso era muito limitado porque a tag do form é um int mas no java vc poder criar um atributo, pra representar a tag, no seu form do tipo que vc quiser só ha uma restrição o form com a jtable deve ser MODAL pra isso funcionar legal. saca só o exemplo não é a melhor saída mas acho que ajuda.
//abre o formulario MODAL
JDialog d = new JDialog(this, true); //leia mais sobre JDialogs em http://www.guj.com.br/posts/list/58732.java#312932
d.setVisible(true);
if (d.getTag() != null){
JTextField_codigoCarro.setText( d.getTag().getCodigoCarro() );
}
bem, como eu disse, o JDialog não tem um atributo Tag mas nada impede vc de criar um atributo que guarde o valor selecionado daí quando o usuario escolher um item no jtable vc atribui o valor escolhido a esse atributo.
//pega o objeto selecionado e atribui ao tag do Dialog
Objeto carroSelecionado = getCarroSelecionadoNoJTable();
this.setTag(carroSelecionado);
this.Disposing();
É importante o Dialog ser modal porque quando um dialog é modal o fluxo de execução da thread é transferido para a Dialog aberta voltando a fluxo normal somente depois que a Dialog é fechada com isso funciona tudo perfeitamente no seguinte cenario:
1 - A dialog é criada e zera o valor selecionado (tag = null)
2 - A dialog é exibida passando o fluxo de execução para o codigo da dialog (d.setVisible(this, true))
3 - O usuario seleciona o item na lista, o seu manipulador de eventos atribui a variavel e fecha a dialog this.setTag( valorSelecionado ); this.dispose())
4 - O fluxo de execução volta para a linha subsequente a exibição do dialog (if (d.getTag() != null) {...} )
5 - Nesse instante vc tem perfeito controle ainda sobre a referencia e os atributos da dialog podendo fazer o que quiser com o valor armazenado na variavel tag.
Coloca a sua JTable em um JDialog, nao em um JFrame…
no seu JDialog, vc cria um atributo que vai receber o valor selecionado…
vc seta esse valor no método valueChanged da interface ListSelectionListener.
qdo vc der OK, vc pegar esse valor do seu dialog ( criando ums getter pra esse atributo no seu componente dialog )
algo parecido com isso:
JDialogConsulta consulta = new JDialogConsulta( oFrameQueDeveContinuarVisivelNoFundo )
// aqui a execução é transferida pro seu dialog e so continua depois que seu dialog é fechado ( isso qdo modal )
consulta.setVisible( true );
// daí pra frente vc faz o q qusier com seu objeto selecionado
if ( consulta.getCarroSelecionado() != null ) {
int x = consulta.getCarroSelecionado().getId();
}
bem, consegui contornar oq disse acima e fiz td direitinho so q esta dando o seguitne erro?
Exception occurred during event dispatching:
java.lang.ArrayIndexOutOfBoundsException: 2035 >= 2035
at java.util.Vector.elementAt(Unknown Source)
at javax.swing.table.DefaultTableModel.getValueAt(Unknown Source)
at javax.swing.JTable.getValueAt(Unknown Source)
at gui.TabelaMunicipio.evento(TabelaMunicipio.java:203)
at gui.TabelaMunicipio$1.actionPerformed(TabelaMunicipio.java:88)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.Dialog$1.run(Unknown Source)
at java.awt.Dialog$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.awt.Dialog.show(Unknown Source)
at java.awt.Component.show(Unknown Source)
at java.awt.Component.setVisible(Unknown Source)
at java.awt.Window.setVisible(Unknown Source)
at java.awt.Dialog.setVisible(Unknown Source)
at gui.AbaCliente.tabela(AbaCliente.java:335)
at gui.AbaCliente.access$2(AbaCliente.java:333)
at gui.AbaCliente$1.actionPerformed(AbaCliente.java:145)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
o lance do getCodigo() depois de getTag() é ipotetisando que vc atribuiu para tag um “objeto” que tem atributos, sendo que o que estamos pegando é o código, mas se vc quisesse por exemplo colocar a descrição e sua objeto tivesse vc poderia fazer;
qd eu aperto o botao escolher q ele adiciona oq ele escolheu a tag e depois da dispose acontece esse erro:
Exception occurred during event dispatching:
java.lang.ArrayIndexOutOfBoundsException: 2035 >= 2035
at java.util.Vector.elementAt(Unknown Source)
at javax.swing.table.DefaultTableModel.getValueAt(Unknown Source)
at javax.swing.JTable.getValueAt(Unknown Source)
at gui.TabelaMunicipio.evento(TabelaMunicipio.java:203)
at gui.TabelaMunicipio$1.actionPerformed(TabelaMunicipio.java:8
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.Dialog$1.run(Unknown Source)
at java.awt.Dialog$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.awt.Dialog.show(Unknown Source)
at java.awt.Component.show(Unknown Source)
at java.awt.Component.setVisible(Unknown Source)
at java.awt.Window.setVisible(Unknown Source)
at java.awt.Dialog.setVisible(Unknown Source)
at gui.AbaCliente.tabela(AbaCliente.java:335)
at gui.AbaCliente.access$2(AbaCliente.java:333)
at gui.AbaCliente$1.actionPerformed(AbaCliente.java:145)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)