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?
zongman
Agosto 11, 2008, 10:48am
#2
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.
brlima
Agosto 11, 2008, 3:02pm
#4
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.
brlima
Agosto 11, 2008, 3:45pm
#6
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.
[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
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?
brlima
Agosto 12, 2008, 1:12pm
#9
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.