Boa noite.
Sou iniciante em Java e estou desenvolvendo uma aplicação java desktop com Eclispe e Hibernate e me surgiu um certo problema… Eu tenho uma janela JFrame como principal (o menu de Opções). Nela eu abro as outras janelas da aplicação somente como JDialog.
O problema é o seguinte, eu queria manipular uma JDialog (1, chamado pela JFrame) através de uma outra JDialog (2, chamada pela JDialog 1).
De acordo com o exemplo da imagem, o que eu pretendo fazer é inserir o produto selecionado na Busca de Produtos na JTable do Pedido de Venda (JDialog de trás) ao clicar no botão OK. Tentei uma manipulação simples no JDialog 2, algo do tipo:
//Evento mouseclick no botão OK da segunda JDialog (Busca de Produtos).
JDialog1 janela = null;
janela.campoCodigo.setText("Teste");
//Tentei tambem usando a JDialog1 como..
JDialog1 janela = new JDialog1();
Tentando ao menos alterar o conteúdo do campo de código do Pedido de Venda através da Busca de Produtos. Mas não funcionou…
É possível que eu faça isso usando JDialogs? Dei uma boa pesquisada sobre o assunto e não encontrei algo que realmente me tirasse essa dúvida. Vi algo tambem sobre JInternalFrame, mas eu não estava querendo usar aquelas janelas internas… Caso possível, alguem poderia me dar uma pista de como proceder?
O fato é que você precisa criar um meio de comunicação entre esses dois JDialogs.
A forma mais simples e não bem vinda seria você passar uma referência do JDialog1 ao JDialog2, então quando você clicase em um botão como “Alterar” no JDialog2 por exemplo, você poderia usar essa referência do JDialog1 que ele tem guardado para chamar um método como “janelaDialog1.alterar()”.
Classe JDialog1, Começa exibindo o texto “OH NOES” e tem o método setMensagemExibida para que uma classe externa possa acessar o método setText do JLabel.
[code]public class JanelaDeDialogo2 extends JDialog {
private static final long serialVersionUID = 1L;
Classe JDialog2 que contém 3 botões que chamam o método setMensagemExibida para alterar o texto do JLabel do objeto JanelaDeDialogo1, do qual a referência é enviada por parâmetro pelo frame quando a segunda janela é criada.
Para o seu JDialog de busca ser mais reutilizável, é melhor fazer de outro jeito, igualmente simples, mas que evita o acoplamento forte da Dialog1 na Dialog2.
Crie no JDialog 2 um método para retornar o objeto selecionado. E um método para saber se o usuário clicou no botão ok. Depois, use esses métodos para obter novamente a informação no JDialog1:
public JDialog1 {
public void efetuarBusca() {
JDialog2 pesquisa = new JDialog2();
pesquisa.setVisible(true);
if (pesquisa.isOk()) {
Produto p = pesquisa.getProduto();
inserirNaTable(p);
}
}
}
Note que nenhuma referência da Dialog1 foi passada para a Dialog2.
Isso permite que a Dialog2 seja usada em outras telas. Isso só funciona se a JDialog2 for modal.