Passar objeto de um JFrame para o outro

Olá Pessoal,

Estou com um problema que deve ser básico mas não encontrei uma forma inteligente de prosseguir.

Seguindo a GIF que estou deixando abaixo (ignorem o layout, bugo por causa do tema), após entrar no cadastro da Conta Corrente e pesquisar o titular, ao clicar no nome da pessoa, preciso que o objeto Pessoa retorne para o JFrame de Contas.

Se fosse para abrir um frame com a informação, basta passa ela pelo construtor mas e quando eu preciso voltar a informação?

Procurei como criar um evento personalizado mas não entendi muito bem, alguém saberia uma forma inteligente de conseguir retorna a Pessoa selecionada para o JFrame do cadastro de Conta?

Olá

É simples, tem varias formas

1 - Tranformar o “TelaPesquisaPessoa” em JDialog

Na “TelaPesquisaPessoa” use JDialog ao invés de JFrame, insira um atributo “pessoaSelecionada” q recebe a pessoa selecionado no evento do clique.

Na “TelaContaCorrente” basta fazer

telaPesquisaPessoa.setVisible(true);
Pessoa pessoa = telaContaCorrente.getPessoaSelecionada();

Para fechar a tela use preferencialmente o setVisible(false);

2 - Usando Propertie do JavaFX

Crie os atributos em ambas as telas “TelaContaCorrente” e “TelaPesquisaPessoa”

SimpleObjectProperty<Pessoa> pessoaSelecionada = new SimpleObjectProperty<>()

Se estiver usando o setVisible true/false para abri e fechar o TelaPesquisaPessoa:
TelaContaCorrente.pessoaSelecionada.bindBidirectional(TelaPesquisaPessoa.pessoaSelecionada);

Se estiver usando o dispose para fechar, então terá q usar o unbindBidirectional antes de fechar

3 - Passar um JFrame por parametro

Na tela TelaPesquisaPessoa, crie o metodo setTelaContaCorrente, ao fechar faça TelaContaCorrente,setPessoa(pessoaSelecionada)

4 - Observer pattern

http://www.tutorialspoint.com/design_pattern/observer_pattern.htm


A melhor das opçoes seria a primeira pois se for um JDialog modal, vc consegue bloquear a alternancia de telas pelo usuario, a segunda é muito boa se ambas as telas permanecerem o tempo toda abertas pois toda ves q uma é atualizada a outra é atualizada tambem, a terceira tbem é boa, mas eu recomendo o uso de interfaces ao inves de passar a classe como parametro. A quarta tbem é boa (talvez a segunda melhor opção), mas considero um pouco trabalhosa de se implementar.

1 curtida

Olá Diego,

Em primeiro lugar quero agradecer muito pela sua explicação, sempre tive esse problema mas só conhecia o método 1. O método 4 (Observer pattern) é sensacional, me deu um “Bum” mental nas utilidades desse padrão no meu projeto.

Comprei um livro recentemente “Design Patterns com Java - Eduardo Guerra” que explica isso, mas como ainda não li tudo não havia visto, eu acabei seguindo um vídeo bem didático que explica como implementar esse padrão e gostaria de deixar abaixo como guia para outras pessoas.

Observer - Padrão de Projetos - YouTube

Por um mundo com mais pessoas como você :grin: