Duvida, transferencia de dados entre janelas [RESOLVIDO]

Boa noite,

Tenho uma outra duvida que esta me deixando louco mesmo, seguinte
se não for pedir muito eu gostaria de uma pequeno exemplo de como transferir dados por ex:
eu tenho um JDialog que é aberto apos eu clicar um botao no meu JFrame e no JDialog possui apenas uma JText que deve ser preenchida
e esse valor ao clicar Ok vai para o JFrame…
se não for pedir mto, eu gostaria msm é de um pequeninho exemplo de fazendo isso.
Eu ja andei vendo um exemplo postado pelo ViniGodoy, mas eu não entendi muito o que foi feito e por isso eu gostaria muito de um exemplo bem basico de
só fazendo isso apenas…

Agradeço a quem quiser me dar essa força

Bom dia,

Conheço um jeito, mas não sei se eh o correto. Você pode passar o seu frame no construtor para o JDialog e utilizar no JDialog os métodos no Frame. Ou dependendo da situação, passe apenas o componente que você precisa alterar.

Qual a dúvida quanto ao exemplo do Vini?

Acredito que a idéia que ele quis passar, é que independente do JDialog ser um componente gráfico, ele é um objeto como qualquer outro que pode retornar valor em uma chamada de método. Para isso funcionar, basta ele ser modal, pois a execução do código do seu frame principal não continua enquanto ele estiver aberto, ou seja:

1 - Instancie novo jdialog no seu frame principal como modal, nesse jdialog, obtenha o endereço e armazene em um atributo.
2 - Feche o dialog (talvez em um botão de Ok) e a execução do código do frame irá continuar.
3 - Chame um método que você criou no dialog, que retorna o valor armazenado anteriormente.

[quote=Bruno M Gasparotto]Qual a dúvida quanto ao exemplo do Vini?

Acredito que a idéia que ele quis passar, é que independente do JDialog ser um componente gráfico, ele é um objeto como qualquer outro que pode retornar valor em uma chamada de método. Para isso funcionar, basta ele ser modal, pois a execução do código do seu frame principal não continua enquanto ele estiver aberto, ou seja:

1 - Instancie novo jdialog no seu frame principal como modal, nesse jdialog, obtenha o endereço e armazene em um atributo.
2 - Feche o dialog (talvez em um botão de Ok) e a execução do código do frame irá continuar.
3 - Chame um método que você criou no dialog, que retorna o valor armazenado anteriormente.[/quote]

Basicamente eu entendi sim o exemplo do vini, mas aqui não esta funcionando…
vou postar meu código
Aqui esta minha classe JDialog inteira

public class TrocarBobina extends JDialog {
	

	private static final long serialVersionUID = 1L;
	
	private JLabel lbInfoBobina;
	private JTextField txtInfoBobina;
	private JButton btnSalvar, btnCancelar;
	protected boolean okSelecionado;
	
	private Color corLetra = Color.black;
	private Font fonteLbs = new Font("Calibri", Font.CENTER_BASELINE, 14);
	
	
	@SuppressWarnings("static-access")
	public TrocarBobina(){
		setTitle("Trocar bobina");
		Container tela = getContentPane();
		setLayout(null);

		lbInfoBobina = new JLabel("Informe a qtd:");
		lbInfoBobina.setBounds(95, 10, 100, 15);
		lbInfoBobina.setFont(fonteLbs);
		lbInfoBobina.setForeground(corLetra);
		
		txtInfoBobina = new JTextField();
		txtInfoBobina.setBounds(85, 30, 120, 30);
		txtInfoBobina.setFont(new Font("Calibri", Font.CENTER_BASELINE, 20));
		txtInfoBobina.setHorizontalAlignment(txtInfoBobina.CENTER);

		tela.add(lbInfoBobina);
		tela.add(txtInfoBobina);
		
		btnSalvar = new JButton("Salvar");
		btnCancelar = new JButton("Cancelar");
		
		btnSalvar.setBounds(50, 70, 80, 30);
		btnCancelar.setBounds(140, 70, 95, 30);
		
		tela.add(btnSalvar);
		tela.add(btnCancelar);
		
		tela.setBackground(Color.LIGHT_GRAY);
		setSize(300, 150);
		setVisible(true);
		setLocationRelativeTo(null);
		
		
		btnSalvar.addActionListener(new ActionListener() {
			
			public void actionPerformed(ActionEvent e) {
				try {
					Integer.parseInt(txtInfoBobina.getText());
				} catch (NumberFormatException ex) {
					JOptionPane.showMessageDialog(TrocarBobina.this, "O valor deve ser um numero!");
				}
				okSelecionado = true;
				setVisible(false);
			}
		});
		
		btnCancelar.addActionListener(new ActionListener() {
			
			public void actionPerformed(ActionEvent e) {
				dispose();
			}
		});
		
	}
	
	public boolean alterarValor(){
		okSelecionado = false;
		setModal(true);
		setVisible(true);
		return okSelecionado;
	}

	public String getValor(){
		return txtInfoBobina.getText();
	}
	
}

E aqui o meu JFrame

public class ControleFrame extends JFrame implements Runnable {
//aqui vao os atributos

//constructor
public ControleFrame() {
		super("Sistema supervisório rotuladora automática - Tela principal");
		Container tela = getContentPane();
		setLayout(null);

//aqui vao os componentes de tela, não vo postar se não fica muito grande

//Esse é o meu botao pra abrir o JDialog
btnBobina.addActionListener(new ActionListener() {
			
			public void actionPerformed(ActionEvent e) {
				onAlterarValor();
			}
		});

//Metodo onAlterarValor()
protected void onAlterarValor(){
		TrocarBobina tbDialog = new TrocarBobina();
		if(tbDialog.alterarValor()){
			txtBobina.setText(tbDialog.getValor());
		}
		 tbDialog.dispose();
	}

Se eu deixo assim, o JDialog nem abre por causa do tbDialog.dispose(), mas msm assim se eu comento ou tiro de qualquer jeito não acontece nada.
Ao meu ver eu segui as instruções do exemplo do vini, mas não consigo achar os meus meu erros ai…

Tem como você postar o link de onde esta o exemplo do ViniGodoy?

Grato.

[quote=Pedro.Guerra]Tem como você postar o link de onde esta o exemplo do ViniGodoy?

Grato.[/quote]

Ai está >> http://www.guj.com.br/java/55710-jdialog-devolvendo-valor-pra-jinternalframe#292687

up

up²

aguardando uma boa alma…
eu sei que provavelmente estou esquecendo de algum detalhe…

.

Cara, se é só um texto, num tem porque usar Jdialog. Usa um JOptionPane mesmo. Pra fazer isso que você tá querendo, você tem que saber o que é referência cruzada, além de entender os comandos set visible, dispose, o que um action listenner realmente faz.

Olha aqui umas dicas pro Joptionpane:
http://docs.oracle.com/javase/tutorial/uiswing/components/dialog.html

Tá em inglês.

[quote=elissonandrade]Cara, se é só um texto, num tem porque usar Jdialog. Usa um JOptionPane mesmo. Pra fazer isso que você tá querendo, você tem que saber o que é referência cruzada, além de entender os comandos set visible, dispose, o que um action listenner realmente faz.

Olha aqui umas dicas pro Joptionpane:
http://docs.oracle.com/javase/tutorial/uiswing/components/dialog.html

Tá em inglês.[/quote]

Aleuia alguem respondeu, obrigadão. Era isso que eu precisava, de uma luz porque nem sempre se acha no google exatamente oq vc quer…
Vlw.

[quote=wippeldigo][quote=elissonandrade]Cara, se é só um texto, num tem porque usar Jdialog. Usa um JOptionPane mesmo. Pra fazer isso que você tá querendo, você tem que saber o que é referência cruzada, além de entender os comandos set visible, dispose, o que um action listenner realmente faz.

Olha aqui umas dicas pro Joptionpane:
http://docs.oracle.com/javase/tutorial/uiswing/components/dialog.html

Tá em inglês.[/quote]

Aleuia alguem respondeu, obrigadão. Era isso que eu precisava, de uma luz porque nem sempre se acha no google exatamente oq vc quer…
Vlw.[/quote]

mas mesmo assim man, eu gostaria de acabar logo com meu problema de transferencia de dados, pq logo vou precisar.
Mas ta complicado pq ou ngm sabe ou ngm da bola pra esse topico, ou dificilmente dos que sabem não viram… :X

Retire o setVisible(true) do construtor do seu JDialog. Aliás, conforme já expliquei no tópico das 15 dicas úteis de Swing, nunca use setVisible no construtor de janelas, pois você estará tornando visível uma janela que não terminou de ser construída ainda.

No caso do JDialog, você só pode alterar o estado dela de não modal para modal se ela não estiver visível. Deixando o setVisible no construtor, você fez com que a janela abrisse antes de chamar alterarValor(). Por isso a janela abre sem ser modal o método continua seguindo até o dispose().

O resto do código me parece certo.

Aliás, você chegou a usar o depurador? Ao invés de ficar dando up no seu tópico e reclamando de não ser visitado, você poderia ter facilmente visto o problema rodando o programa passo-a-passo. Estaria óbvio que a janela abriria antes de chegar ao método alterarValor().

[quote=ViniGodoy]Retire o setVisible(true) do construtor do seu JDialog. Aliás, conforme já expliquei no tópico das 15 dicas úteis de Swing, nunca use setVisible no construtor de janelas, pois você estará tornando visível uma janela que não terminou de ser construída ainda.

No caso do JDialog, você só pode alterar o estado dela de não modal para modal se ela não estiver visível. Deixando o setVisible no construtor, você fez com que a janela abrisse antes de chamar alterarValor(). Por isso a janela abre sem ser modal o método continua seguindo até o dispose().

O resto do código me parece certo.

Aliás, você chegou a usar o depurador? Ao invés de ficar dando up no seu tópico e reclamando de não ser visitado, você poderia ter facilmente visto o problema rodando o programa passo-a-passo. Estaria óbvio que a janela abriria antes de chegar ao método alterarValor().[/quote]

Desculpe pela minha insistencia, em relação ao depurador eu tentei usar claro mas não localizei o erro e por isso recorri ao fórum.
Enfim muito obrigado pelas dicas, certeza que vão ser úteis.

[quote=wippeldigo][quote=ViniGodoy]Retire o setVisible(true) do construtor do seu JDialog. Aliás, conforme já expliquei no tópico das 15 dicas úteis de Swing, nunca use setVisible no construtor de janelas, pois você estará tornando visível uma janela que não terminou de ser construída ainda.

No caso do JDialog, você só pode alterar o estado dela de não modal para modal se ela não estiver visível. Deixando o setVisible no construtor, você fez com que a janela abrisse antes de chamar alterarValor(). Por isso a janela abre sem ser modal o método continua seguindo até o dispose().

O resto do código me parece certo.

Aliás, você chegou a usar o depurador? Ao invés de ficar dando up no seu tópico e reclamando de não ser visitado, você poderia ter facilmente visto o problema rodando o programa passo-a-passo. Estaria óbvio que a janela abriria antes de chegar ao método alterarValor().[/quote]

Desculpe pela minha insistencia, em relação ao depurador eu tentei usar claro mas não localizei o erro e por isso recorri ao fórum.
Enfim muito obrigado pelas dicas, certeza que vão ser úteis. [/quote]
Deu certo aqui, só tive que tirar o setVisible do constructor do meu JDialog mesmo. Muito Obrigado mesmo, e desculpe qualquer incoveniente que eu tenha feito aqui no fórum.