Ola galera…queria uma ajuda sobre gereciar melhor janelas no swing…
seguinte estou rodando um aplicativo em swing…ai tenho uma janela principal onde apartir desta vou chamando outras janelas…mais toda a janela nova que chamo a antiga continua aberta na tela…isso dependendo do uso esta deixando muitas janelas apertas…gostaria de saber como faço pra qndo clicar para abrir uma nova janela a janela antiga fecha-se…e mais uma coisa na janela principal gostaria de qndo clicar no “X” para fechar…ele me desse a msagem por exemplo de “DESEJA REALMENTE SAIR”…
VLW
Nota: extendendo minha janela principal do JFrame.
Isto é o básico.
package guj;
import java.awt.BorderLayout;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
public class ExemploFechar extends JFrame {
private static final long serialVersionUID = 1L;
private JPanel jContentPane = null;
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
ExemploFechar thisClass = new ExemploFechar();
thisClass.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE); // importante
thisClass.setVisible(true);
}
});
}
public ExemploFechar() {
super();
initialize();
}
private void initialize() {
this.setSize(300, 200);
this.setContentPane(getJContentPane());
this.setTitle("Exemplo");
this.addWindowListener(new WindowAdapter() { // importante
@Override
public void windowClosing(WindowEvent e) {
int ret = JOptionPane.showConfirmDialog(ExemploFechar.this, "Deseja sair do programa?");
if (ret == JOptionPane.YES_OPTION) {
System.exit(0); // cai fora
}
}
});
}
private JPanel getJContentPane() {
if (jContentPane == null) {
jContentPane = new JPanel();
jContentPane.setLayout(new BorderLayout());
}
return jContentPane;
}
}
vlw por essa dica assim…
agora se por exemplo na janela principal qndo clicar em um botao por exemplo ele abre outra janela(ate aki ja esta OK)…ai quero q a principal feche…??
coloco System.exit() ou não??
System.exit encerra toda a aplicação. Para fechar apenas o frame faça:
brigado…
e por exemplo…coloco frame.dispose(); na principal ai ela fecha qndo chamo a outra janela…mais qndo fechar a outra janela essa janela volta…??
ou tenho q fazer algum comando na outra janela pra poder voltar a janela principal???
VLW
Se a janela precisa voltar, você deve apenas ocultar a janela.
frame.setVisible(false); //oculta a janela
frame.setVisible(true); //exibe a janela
Você precisa abrir uma janela para obter alguma entrada do usuário e depois voltar para principal? Um JDialog não seria melhor do que dois JFrames?
Eu costumo ter apenas e tão somente 1 JFrame nas minhas aplicações. As outras telas costumam resolver-se com JDialogs ou então com JTabbedPanes.
O próprio JOptionPane é uma classe que cria JDialogs customizados (veja o método “createDialog”).