Problema com JFrame e JDialog modal[RESOLVIDO]

Bom dia pessoal. Estou tendo o seguinte problema:

Tenho um JFrame que chama um JDialog modal. Até ai tudo bem. Porém depois de trocar de aplicativo (com alt+tab por exemplo), se eu voltar ao programa só aparecerá o JDialog, ficando o JFrame “escondido”. Alguém sabe alguma maneira de contornar esse problema?

Blz,
passa o JFrame como parent do JDialog.

Falou…

[quote=zongman]Blz,
passa o JFrame como parent do JDialog.

Falou…[/quote]

Valeu pela ajuda, só acho que não dá pra eu fazer isso porque no caso eu tenho uma classe que herda a JDialog.

cria um construtor que recebe o frame e chama super(Frame) do JDialog que tá implementando!

Obrigado pela ajuda, mas não deu certo. Acho que faltaram detalhes na minha explicação:

Tenho um JFrame que é a tela principal. Dentro dela tenho um JPanel. Esse JPanel chama o JDialog, que é modal. Se eu dou um alt+tab e troco de aplicação, o JFrame(junto com o JPanel e tudo mais que estiver nele) some e só volta a aparecer se eu fechar o JDialog. Eu já procurei bastante mas ainda não achei a resposta. Mas agradeço a boa vontade dos que me ajudaram até aqui.

Entedi mais ainda a duvida… E é isso msm que tão respondendo no topico… rs

O que falta é o teu DIalog saber que o Owner dele é o Frame que voce esta chamando ele…

Na class JDialog que vc extende, faz algo do tipo MinhaDialog extends JDialog, certo?

É so criar um construtor:

public MinhaDialog(Frame fr){
   super(fr);
}

Ou então vc nao explicou e piorou a sua explicação, pq eu to entendo isso. :smiley:

[quote=brlima]Entedi mais ainda a duvida… E é isso msm que tão respondendo no topico… rs

O que falta é o teu DIalog saber que o Owner dele é o Frame que voce esta chamando ele…

Na class JDialog que vc extende, faz algo do tipo MinhaDialog extends JDialog, certo?

É so criar um construtor:

public MinhaDialog(Frame fr){
   super(fr);
}

Ou então vc nao explicou e piorou a sua explicação, pq eu to entendo isso. :D[/quote]

Bom, entendi o que você disse e acho que está tudo certo, só não sei como passar para o JDialog o Frame. Abaixo o código:

[code]
public class TelaPrincipal extends JFrame {

    private JDesktopPane desktopPane = null;
private JMenuBar jJMenuBar = null;
private JMenu jMenu = null;
private JMenuItem jMenuItem = null;
private JPanel jContentPane = null;

public TelaPrincipal() {
	super();
	desktopPane = new JDesktopPane();
	desktopPane.setFocusTraversalKeysEnabled(false);
	initialize();
	
}

private void initialize() {
	this.add(desktopPane);
	this.setJMenuBar(getJJMenuBar());
	this.setContentPane(desktopPane);
	this.setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
	this.getContentPane().add(getJContentPane());
	this.setTitle("Teste v0.1");
	this.setBounds(new java.awt.Rectangle(0,0,796,713));
	MetalLookAndFeel.setCurrentTheme(new OceanTheme());
	this.setFocusableWindowState(true);
}

private JPanel getJContentPane() {
	if (jContentPane == null) {
		GridLayout gridLayout = new GridLayout();
		gridLayout.setRows(1);
		jContentPane = new JPanel();
		jContentPane.setLayout(gridLayout);
	}
	return jContentPane;
}

private JMenuBar getJJMenuBar() {
	if (jJMenuBar == null) {
		jJMenuBar = new JMenuBar();
		jJMenuBar.add(getJMenu());
	}
	return jJMenuBar;
}

private JMenu getJMenu() {
	if (jMenu == null) {
		jMenu = new JMenu();
		jMenu.setText("Arquivo");
		jMenu.setFont(new java.awt.Font("Dialog", java.awt.Font.PLAIN, 12));
		jMenu.add(getJMenuItem());
	}
	return jMenu;
}

private JMenuItem getJMenuItem() {
	if (jMenuItem == null) {
		jMenuItem = new JMenuItem();
		jMenuItem.setText("Abrir");
		jMenuItem.setFont(new java.awt.Font("Dialog", java.awt.Font.PLAIN, 12));
		jMenuItem.addActionListener(new java.awt.event.ActionListener() {
			public void actionPerformed(java.awt.event.ActionEvent e) {
				jContentPane.add(new MeuJDialog(super(Frame)));
			}
		});
	}
	return jMenuItem;
}

public static void main(String[] args) {
	TelaPrincipal tela = new TelaPrincipal();
	tela.setVisible(true);
}

}[/code]

O erro aparece na linha abaixo.

Ali no Frame já tentei this e TelaPrincipal(nome da classe), mas não deu certo. Não repara muito no código que eu vou começar a ver Swing esse semestre e to fazendo isso de metido mesmo :smiley:

Bom pessoal, o código funcionou. Obrigado a todos que ajudaram. Só mais uma coisa. Existe um jeito de passar o JFrame para o JDialog sem ser pelo construtor?

jContentPane.add(new MeuJDialog(super(Frame)));  

Que que é isso aqui???
Isso aí não vai mostrar nunca uma JDIalog… rsrs

O correto seria

MeuJDialog d = new MeuJDialog(this);
d.setModal(true);
d.setVisible(true);

Não precisa adicionar nada de janela no ContentPane do frame… =/

E sobre passar pelo construtor, sim, somente pelo contrutor, pois o construtor da JDIalog pede o Owner logo no inicio…

[quote=brlima] jContentPane.add(new MeuJDialog(super(Frame)));
Que que é isso aqui???
Isso aí não vai mostrar nunca uma JDIalog… rsrs

O correto seria

MeuJDialog d = new MeuJDialog(this);
d.setModal(true);
d.setVisible(true);

Não precisa adicionar nada de janela no ContentPane do frame… =/

E sobre passar pelo construtor, sim, somente pelo contrutor, pois o construtor da JDIalog pede o Owner logo no inicio…[/quote]

O jeito é fazer no construtor então hehe. Obrigado pela ajuda. Foi realmente muito útil.