JFrame -> JDialog -> JDialog, se fechar perde o foco!

Olá turma, boa tarde! :smiley:

Tenho um JFrame com um painel e um botão. Quando clico no botão ele abre um JDialog com um painel e outros dois botões. Ao clicar em qualquer um desses dois botões é aberto um novo JDialog com um painel e uma caixa de texto.
O problema é que quando chamo o método dispose() nesse último JDialog (o da caixinha de texto), o JDialog anterior (o que tem os dois botões) aparece normal na tela mas o “foco” volta para o JFrame. Gostaria que o foco voltasse ao JDialog anterior.

Pesquisei muito, fiz várias tentativas mas nenhuma delas resolveu. Nem setFocus(), nem setAlways, … :frowning:

Alguma idéia? :idea:
Obrigada, aguardarei pela ajuda. Até +…

todos os JDialog estão como modal?

Olá yhhik, :smiley:

Então, com modal true ele volta com o foco corretamente. Mas, se naquele último JDialog for chamar um terceiro JDialog, ele não abre. :frowning:
Existe um número limitado de JDialog com modal true. :roll:

Obrigada pela ajuda… tem mais alguma idéia? :idea:

Curioso com o que vc falou…resolvir testar esse limite do JDialog.

crie um JFrame para chamar o primeiro JDialog e mais 5 JDialogs.
então coloquei os 6 Jdiloags se chamando em círculo.
todos eles modal.
acho que cheguei a abrir uns 20 JDialog’s… todos modais.

ae para de abrir no terceiro?
estranho…

Olá… acabei de fazer o mesmo que você agora para testar, só troquei o JDialog que estava chamando por outro e consegui passar de três JDialog`s. Até aí OK, sem problemas. Obrigada :smiley:
Mas quando chamo o dipose() do JDialog atual, o foco não retorna, por exemplo, a caixa de texto da JDialog anterior… mesmo com modal true. E agora? :frowning:

Obrigada mesmo pela ajuda yhhik …

Olá meninos! Resolvi… no lugar do dispose chamei o objeto anterior novamente. Obrigada!
Desculpem a ignorância… :oops:

hun…
msm assim há algo errado em seu codigo…
veja:

[code]import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JDialog;

public class huj extends JDialog{

private JButton b,b1;

public huj(){
	
	b=new JButton("abrir");
	b.addActionListener(new util());
	b1=new JButton("fechar");	
	b1.addActionListener(new util());
	this.setLayout(new FlowLayout());
	this.add(b1);
	this.add(b);
	this.setModal(true);
	this.setSize(200,200);
	this.setVisible(true);
	

}

private class util implements ActionListener{

	@Override
	public void actionPerformed(ActionEvent e) {
		if(e.getSource()==b)
		new guj2();
		else
			dispose();
	}
	
}
public static void main(String[] args) {
	new huj();

}

}
[/code]

[code]import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JDialog;

public class guj2 extends JDialog {
private JButton b,b1;
public guj2(){

	b=new JButton("abrir");
	b.addActionListener(new util());
	b1=new JButton("fechar");	
	b1.addActionListener(new util());
	
	this.setLayout(new FlowLayout());
	this.add(b1);
	this.add(b);
	this.setModal(true);
	this.setSize(200,200);
	this.setVisible(true);
	

}

private class util implements ActionListener{

	@Override
	public void actionPerformed(ActionEvent e) {
		if(e.getSource()==b)
			new huj();
			else
				dispose();
		
	}
	
	
	
	
}

}
[/code]

estao se chamando em cadeia.mas nao importa quantos JDialogs estao abertos,quando clico em fechar sempre volta o foco para o JDialog anterior.

mas como vc ja resolveu.
Boa sorte nos estudos. :smiley:
att