Como retornar um objeto de uma classe?

4 respostas
javaJoni

Olá galera, depois de muito fuçar aqui no fórum e encontrar somente fragmentos do que realmente preciso resolvi postar.
O problema: Tenho um Frame e nele um internlFrame que serve para o cadastro de ‘Destino’, ‘Portador’ e ‘Objeto do Serviço’(pode ser aberto uma vez o mesmo para as 3 opções, ou seja posso ter 3 IFrames abertos 1 p/ cada 1 ). Em um botão deste IFrame eu chamo uma tabela com dados para a escolha que deverão voltar para o IFrame. Porém quando os 3 IFrames(que são abertos através do Menu) são abertos os dados de qualquer um deles voltam para o último que foi aberto e não para o seu respectivo.

Esta é a chamada:

private void menuCadPortadorActionPerformed(java.awt.event.ActionEvent evt) { JanCadPortDestObj jan2CamposPort=new JanCadPortDestObj("PORTADOR");// aqui é criada a instancia try { //cada menu tem uma chamada dessas jan2CamposPort.setName("cadPortador"); if (!isInternalFrameOpen(jan2CamposPort)) { desktopPane.add(jan2CamposPort); jan2CamposPort.setSelected(true); } } catch (PropertyVetoException ex) { forma.mensagemErro("Erro.\n"+ex.getMessage(),"OrdeMaxx"); } }

Eu crio os objetos da classe JanCadPortDestObj

criei o metodo estático para não criar mais um objeto

Aqui joga os dados do banco para serem exibidos no IFrame e neste momento joga para o último IFrame que foi aberto.
Nota: Se eu abro só um IFrame dá certo.

Se alguém puder me ajudar eu agradeço muitíssimo. :thumbup:

4 Respostas

berg.pb

Qdo vc faz dese jeito, ele aparece as outras telas, mas instancia para a mesma posição de memória, por isso q a última é quem aparece os dados.
O ideal ( e tb o padronizado), é vc ter somente uma tela de manipulação de cada vez.

Por exemplo:

nos programas editores de texto, se vc clica num botão que abra a função ‘Abrir’, vc somente abre a 01 tela e só pode abrir de novo se esta estiver fechada.

A minha sugestão: faça um singleton deste InternalFrame… chame-o somente uma vez…
Daí resolve…

Abraços
Berg

javaJoni

Olá Berg. :smiley:
Eu também havia pensado em fazer desta maneira que vc falou, mas achei que iria facilitar para o usuário se pudesse abrir nas 3 vezes.
Então quando instancio os 3 objetos, estes vão apontar para o mesmo local na heap?

Valeu :wink:

berg.pb

Bem, pelo q vc disse, se cada botão ou componente tem a copia deste codigo do try/catch, e não instanciam um novo objeto, então eles apontam para a mesma referência de memória.

Meu conselho: faça como todo mundo faz! Deixe apenas uma aberta… Mtas telas iguais, para alguns usuários, pode mais atrapalhar do q facilitar…

Evite gerar problema de BIOS.

Abraços


Obs.: BIOS - Burro Ignorante Operando Sistema…
8)

javaJoni

Não, isto é apenas na chamada p abrir o IFrame.
O IFrame é o mesmo(é apenas uma classe).
Instanciei objetos com nomes diferentes(cada um é um objeto independente?)
Cada um dos 3 itens de menu faz uma chamada como a descrita anteriormente, mas como disse os objetos têm nomes diferentes.
Os 3 métodos chamam a mesma classe(IFrame).

Mas acho que vou fazer como vc disse e eu concordo com a parte da BIOS, hehe.

Abraço. :thumbup:

Criado 28 de janeiro de 2009
Ultima resposta 29 de jan. de 2009
Respostas 4
Participantes 2