Passagem de valores entre janelas

Olá pessoal,

Estou começando a desenvolver em java, e estou com uma dúvida. Se alguém puder me ajudar com alguma luz ficarei bastante agradecido. É o seguinte:

Eu tenho uma janela de cadastro, esta janela chama outra janela, como por exemplo um cadastro de clientes. Eu gostaria de selecionar o cliente nesta segunda janela e enviar o conteúdo selecionado para um JTextField da primeira janela. Já procurei aqui mesmo no Guj e não achei nada à respeito, será que alguém pode me dar um exemplo de como fazer isso?

Valeu pela força.

Celso,

As “janelas”, no Java, são objetos como outros quaisquer. Criada uma instância da janela, tendo ela guardada em uma variável, você pode chamar métodos dela normalmente. Crie métodos que faça o que você quer fazer.

Abraço,

Armando

Olá Armando,

Obrigado pela dica. Será que você poderia me dar um exemplo de como eu poderia fazer isso?

Primeiro acho que você deve entender Orientação a Objetos e entender o que são os Objetos e troca de (comunicação por) mensagens.

Dê uma olhada no tópico. Ele usa um JDialog, mas não é muito diferente entre JFrames.

http://www.guj.com.br/posts/list/48591.java#254456

Então ViniGodoy,

Eu fiz exatamente como está no exemplo que vc me indicou, mas o valor não retorna para a janela (objeto) que chamou a outra. Eu não estou usuando JDialog, estou usando dois JFrame. Será que com o JFrame está faltando alguma coisa? Se alguém puder ajudar, agradeço.

Valeu Vini.

Faça algo mais ou menos assim:

[code]public class SuaJanelaUm … {
UmaOutraJanela j2; // em algum momento cria o objeto da janela e exibe

public void quandoUmBotaoEhClicado() {
j2.exibir( dadoRecuperadosDestaJanela );
}
}[/code]

public class UmaOutraJanela ..... { public void exibir( Dado d ) { algumCampo.setText( d.getNome() ); } }

O idela seria bolar uma arquitetura onde as janelas só capturam entradas (IN) e mostram saídas (OUT), todo o processamento disso ai deveria ficar a cargo de outra camada…Dê uma olhada em MVC…Se você tivesse um controlador abaixo das janelas, elas poderiam usar ele pra fazer essa “ponte”…

Mas, já que você não tem isso…Vejo duas abordagens:
1-Cria métodos “static” na classe que vai receber o objeto, assim vc chama os métodos da classe e não do objeto, já que na outra janela vc não vai ter acesso a um objeto da janela pai…Mas isso me cheira um pouco a gambiarra…Porém funciona, eu mesmo usei muito isso no início da minha vida Java…

<código janela pai>

public class JanelaPai extends JFrame
{

public static void setObjetoSelecionado(Objeto objeto)
{
//Aqui vc pega as propriedades do objeto e as mostra nos componentes que tiver
}

}
</código janela pai>

<código janela filho>

public class JanelaFilho extends JFrame
{

public void selecionaObjeto(Objeto objeto)
{
//Depois de obter o objeto
JanelaPai.setObjetoSelecionado(objeto);
//Pronto a janela pai recebeu o objeto
}

}
</código janela filho>

2-Passar a instância da Janela pai na criação da outra janela, ai, nesta outra janela, qdo o objeto for selecionado/criado, vc tem acesso ao objeto da classe pai para chamar um método e atualizar os valores…

<código janela pai>

public class JanelaPai extends JFrame
{

public void chamaJanelaFilho()
{
JanelaFilho janela = new JanelaFilho(this);
}

public void setObjetoSelecionado(Objeto objeto)
{
//Aqui vc pega as propriedades do objeto e as mostra nos componentes que tiver
}

}
</código janela pai>

<código janela filho>

public class JanelaFilho extends JFrame
{
private JanelaPai janelaPai;

public JanelaFilho(JanelaPai janela)//construtor
{
this.janela = janela;
}

public void selecionaObjeto(Objeto objeto)
{
//Depois de obter o objeto
janela.setObjetoSelecionado(objeto);
//Pronto a janela pai recebeu o objeto
}

}
</código janela filho>

PS: Observe no código a diferença entre chamar o método estático da classe no exemplo 1, e chamar o método do objeto no exemplo 2.

Na minha opinião, os dois métodos são “estranhos”, vc deveria deixar essa manipulação toda de objetos para outra classe…

Olá Daniel,

Talvez eu não tenha explicado exatamente o que eu preciso. Vou tentar ser mais claro.

Eu tenho uma janela de cadastro de clientes que está aberta. Neste cadastro eu tenho um campo país. Qdo o usuário for cadastrar um novo cliente ele precisará informar o país, caso o país não exista, ele deverá fazer o cadastro do país, então ele clicará num botão ao lado do campo país que chamará a janela de cadastro de países para cadastrá-los. Assim que o país for adicionado, ele aparecerá no grid do cadastro de países. Eu gostaria que qdo o usuário der um duplo clique no país, sua descrição seja passada para a janela do cadastro de clientes que já está aberta. É este o meu problema.

Espero ter sido mais claro com esta explicação. Agradeço aos colegas que estão sugerindo alternativas.

Se alguém sabe como fazer isso e puder me passar agradeço bastante.

Valeu.

As soluções que sugeri cuidam desse problema…

reforço o q o eclipso disse…

ao inves de pensar na “comunicacao entre janelas”, tente pensar na comunicacao entre os objetos que estao representados nessas janelas…

janelas apenas coletam e exibem dados, mais nada…
tente exlcuir toda logica possivel das janelas, e passe elas pros controladores…

Amigão, seguinte…

Siga o conselho do Daniel… aprenda orientação a objetos primeiro… seu caminho será muito mais suave…

Abraço,

Armando

VALEU ECLIPSO!!!

Com a sua ajuda eu consegui fazer o que eu precisava. Valeu mesmo!!!

:smiley: