Carregar dados de outra janela

6 respostas
J

Olá, estou com uma dúvida, não encontrei no fórum por situação parecida (certamente existe mas acredito não ter usado as palavras/termos adequados).

Na Janela1, tenho um JTextField e ao lado desse um JButton. Coloquei no clique desse botão para chamar uma nova janela:

if (clientes = null){
clientes = new Clientes();
clientes.setVisible(true);
} else {
clientes.setVisible(true);
clientes.setState(JFrame.NORMAL);
}

Isso me mostra a Janela2 (Localizar Clientes). Essa Janela2 basicamente tem uma JTable com os clientes do banco de dados. Seleciono um cliente (pego a linha selecionada), pressiono o botão Carregar e…
1 - Queria que a Janela2 fosse fechada e
2 - Que o cliente selecionado fosse carregado no JTextField da Janela1.

Agradeço de antemão qualquer ajuda. Caso exista uma maneira melhor de fazer isso, estou aberto a sugestões!

6 Respostas

Matchola

Vamos por partes:

1)Janela2.setVisible(false);

2) Pelo que eu entendi você quer muda o texto JTextField, porque você não lê as informações
do cliente em uma ou mais variável(is) String e faz assim:JTextField.setText(variavelCliente);

Espero ter ajudado!!

J

Olá Matchola, obrigado pela resposta.

Quanto ao item 1

Janela2.setVisible(false);

OK, entendi

Agora quanto ao item 2
Eu pego a linha selecionada (e posso colocar nome do cliente numa variável, isso na Janela2)
Da maneira que você sugeriu, com o comando

JTextField.setText(variavelCliente);

faria que o texto da variavelCliente da Janela2 fosse para o JTextField da Janela1. Isso está correto?
Não tenho que especificar a Janela/JTextField destino? Esse comando não seria somente para a mesma janela?

phpinheiro

joellazzari,

eu vejo duas maneiras de se fazer o que vc mencionou.

A primeira maneira é a famosa POG: passar como argumento pra janela 2 o objeto do seu textfield e fazer um setText lá.

A segunda é a melhor e mais correta, ao meu ver: Obsevable.

Dê uma pesquisada nos tutoriais do GUJ, tem um tutorial ótimo de Observer e Observable.

phpinheiro

pra ser mais específico:

http://www.guj.com.br/article.show.logic?id=47

Matchola

Vê se esse exemplo ajuda em alguma coisa

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;


public class exemplo extends JFrame implements ActionListener{
	JButton botaoConfirma = new JButton("Confirma");//componete janela 1
	JTextField nomeCliente = new JTextField(8);//componete janela 1
	static String getNomeCliente;//pega o q esta no JTextField nomeCliente
	
	JFrame janela2 = new JFrame("janela2");//nova janela
	JTextField setNomeCliente = new JTextField(8);//recebe o q esta getNomeCliente
	
	
	public exemplo(){
	     super("janela1");
	     add(botaoConfirma,BorderLayout.EAST);
  	     add(nomeCliente,BorderLayout.WEST);
	     pack();
         setVisible(true);
	     botaoConfirma.addActionListener(this);
	}
	public void actionPerformed(ActionEvent arg0) {
		getNomeCliente = nomeCliente.getText();
		setVisible(false);
		janela2.add(setNomeCliente);
		setNomeCliente.setText(getNomeCliente);
		janela2.pack();
		janela2.setVisible(true);
	}
    public static void main(String[] args){
    	new exemplo();
    }
}

é meio idiota mas espero ter ajudado!!

J

phpinheiro

  • Numa inocente busca no google por POG Java me deparei com essa página aqui:
    http://desciclo.pedia.ws/wiki/Programação_Orientada_a_Gambiarras
    Juro que achei que o termo POG pudesse ser alguma técnica, etc, etc (deixa pra lá… hehe)

  • Passar como argumento pra janela 2 (não seria da 2 pra 1?) o objeto do seu textfield e fazer um setText lá.
    Isso não me assustou muito, devo procurar uma solução em cima dessa idéia.

  • Obsevable:
    Vou procurar estudar sobre Obsevable, pois me pareceu extremamente útil (antes tenho que entender outros pontos em OO).

Matchola

  • Obrigado pelo código, vai me ajudar muito. Vou separar isso em duas classes:

public class TelaPrincipal { ... //aqui tenho o JTextField + JButton ... }

public class LocalizarClientes { ... //aqui carrego minha JTable (com os clientes do banco de dados) //seleciono o cliente (pego a linha selecionada) //e envio para o JTextField da TelaPrincipal ... }

Vou procurar entender exatamente como funciona sua classe exemplo e tentar adaptar na solução do meu problema.

Quando chegar no resultado desejado, coloco o código aqui.

Obrigado ambos!

Criado 12 de março de 2009
Ultima resposta 12 de mar. de 2009
Respostas 6
Participantes 3