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

6 respostas
I

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é +…

6 Respostas

yhhik

todos os JDialog estão como modal?

I

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:

yhhik

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…

I

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 …

I

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

yhhik
hun.. msm assim há algo errado em seu codigo.. veja:
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();

	}

}
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();
			
		}
		
		
		
		
	}

}

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. :D
att

Criado 30 de outubro de 2011
Ultima resposta 30 de out. de 2011
Respostas 6
Participantes 2