Conteúdo de jtextfield em novo JFrame

Bom dia,estou enroscado em um parte de uma aplicação minha.Tenho um frame que realizará uma venda,e o que queria era o seguinte,ao clicar em um botão ele chamasse a tela de busca do cadastro de cliente,para que o usuário pudesse selecionar o cliente(isso faço normalmente),e clicasse em um novo botão que pudesse carregar o nome desse cliente na tela da venda. O meu problema está nessa parte de transferir de um frame para outro o conteúdo do textfield. Não sei como fazer isso,pesquisei em alguns foruns aqui mesmo do guj,encontrei material ensinando a fazer com um getInstance() ,mas não funcionou. E não sei nem que logica usaria para resolver essa operação.

Gostaria de uma ajuda.

  1. Se você é novato, escreva sua aplicação de forma que ela tenha apenas um JFrame, e todas as outras telas sejam JDialogs modais. Isso torna sua aplicação muito mais fácil de controlar que uma que tem vários JFrames (como você deve saber, não existe “JFrame modal”).
  2. A tela que deve ser preenchida quando for ativada é na verdade uma forma de visualizar e editar um objeto da classe Cliente (ou Venda, ou sei lá qual for), certo?
    Então você pode criar um método nesse JDialog que receba um objeto dessa classe e que não seja só um simples setter, mas também já preencha os campos necessários. Por exemplo, em vez de termos um método setCliente que seja só assim:
this.cliente = cliente;

você pode ter algo como:

this.cliente = cliente;
txtNome.setText (cliente.getNome());
txtEndereco.setText (cliente.getEndereco());
txtCodigo.setText (String.format ("%05d", cliente.getCodigo()));
txtSaldoConta.setText(String.format ("R$ %,.7.2f", cliente.getSaldo());

ou coisa parecida. O método getCliente (para você chamar depois que o diálogo for fechado) pode pegar todos os valores, mais ou menos assim:

public Cliente getCliente() {
    cliente.setNome (txtNome.getText());
    cliente.setEndereco (txtEndereco.getText());
    ...
    return cliente;

Uma coisa muito boa é você nunca botar um “setVisible” no construtor de uma classe derivada de JFrame ou JDialog. Em vez disso, você constrói o objeto como costumeiro, passa os parâmetros adequados (por exemplo, usando um método “setCliente”), e aí dá o setVisible. Uma vez que o diálogo tenha retornado, você pode ler os valores que foram preenchidos no formulário com um método adequado (como getCliente).

Note que setCliente e getCliente não são métodos do formulário que chama o outro formulário, e sim do formulário que será visualizado e onde você irá preencher ou capturar os dados.

[quote=entanglement]1) Se você é novato, escreva sua aplicação de forma que ela tenha apenas um JFrame, e todas as outras telas sejam JDialogs modais. Isso torna sua aplicação muito mais fácil de controlar que uma que tem vários JFrames (como você deve saber, não existe “JFrame modal”).
[/quote]
Muito bem eu entendi,acredito que dessa forma resolverei mais fácil o problema. Mas primeiramente,quantos aos frames que tenho eu consigo alterar para JDialog,ou terei que refazer?

Consegui fazer o que eu queria,mas uma vez deu certo! Muito obrigado!!! Porém o que está acontecendo agora é o seguinte: Eu quero trazer nessa tela de venda o cliente e o produto,então estou chamando a tela de busca referente aos dois,e importando a informação que quero nessa tela de venda. Consegui fazer para o cliente, preencheu a informação corretamente, mas quando chega no produto para preencher a informação,me abre uma nova tela de venda por causa do setVisible(true). Todo vez que clico no botão ele traz uma nova janela,me fazendo nunca conseguir preencher os dois campos.E se tiro esse setVisible() ele não preenche o textfield.

Fiz conforme voce falou criei o metodo set e na hora de chamar estou fazendo assim

VendaDialog vd = new VendaDialog();
vd.setCliente();
vd.setVisible(true);
dispose();

Isso tanto no cliente como no Produto.

Como posso corrigir, alguma ideia?

É melhor vc postar o codigo todo logo pra entender melhor!

Tentei criar um metodo para verificar se a janela já estava aberta e não abrir novamente,mas não funciou!
Ficando da seguinte maneira:

public VendaDialog venda = null;

public void verificaJanela{

if(venda == null){
venda = new VendaDialog();
}
venda.setVisible();

Porem continua abrindo varias janelas,e removi o setVisible do botão que importava o nome para o dialog da venda, e coloquei esse metodo no lugar,o que aconteceu foi que ele parou de preencheu o textfield,apenas abriu uma nova janela.

Conto com a ajuda.

Debug ? verifique se você não está fazendo a chamada da tela mais de uma vez …

Não sei ainda se criar mais de um jFrame é errado ou certo.

Até então o que eu faço é criar um jFrame e dentro dele
ir trabalhando com jPanels ou outros grupos de componentes do swing.

Tem dado certo pois geralmente quem controla as instâncias é uma classe main java
ou a própria main jFrame como já vi em alguns casos.

Aprendi algumas coisas sobre isso no GUJ e no Youtube fazendo exatamente
como o pessoal fazia.