Olá pessoal,
Já pesquisei bastante no forum e não achei nada parecido com o que preciso fazer.
Posso fazer um evento que escuta o fechamento de uma janela através do X da janela, mas se eu colocar um botão com a função fechar esse evento não é executado.
Dessa forma, minha pergunta é: como faço para um botão fechar a janela da mesma forma como o botão X da janela?
Ou então, se precisar fechar só a janela:
suaJanela.setVisible(false);
Olha esse exemplo, é só adaptar o método do jeito que vc quer:
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
int i = JOptionPane.showConfirmDialog(null,
"Deseja realmente sair?", "Saída",
JOptionPane.YES_NO_OPTION);
if (i == JOptionPane.YES_OPTION) {
System.exit(0);
} else {
repaint();
}
}
});
Ou vc pode usar:
JFrame.DISPOSE_ON_CLOSE;
ou
JFrame.HIDE_ON_CLOSE;
Creio que vcs não me entenderam. Vou colocar uns passos aqui para descrever o que estou dizendo:
- crie um JFrame com apenas um botão
- crie um evento formWindowClosing
addWindowListener(new java.awt.event.WindowAdapter() {
public void windowClosing(java.awt.event.WindowEvent evt) {
formWindowClosing(evt);
}
});
private void formWindowClosing(java.awt.event.WindowEvent evt) {
System.out.println("Fechando a janela");
}
3) coloque no botão o System.exit(0) ou o dispose()
4) rode o projeto a primeira vez e feche pelo X da janela.
5) observe o System.out
6) rode o projeto a segunda vez e feche através do bortão.
7) observe o System.out
Notaram a diferença?
A diferença é que vc passará um objeto WindowEvent ao clicar no X da Janela e qndo clicar no botão passará um objeto ActionEvent
private void formWindowClosing(java.awt.event.WindowEvent evt) {
System.out.println("Fechando a janela");
}
private void formWindowClosing(java.awt.event.ActionEvent evt) {
System.out.println("Fechando a janela");
}
Um, e tem alguma forma de passar o WindowEvent ao clicar no JButton? A minha maior dúvida é quanto o parâmetro evt. O que passar nele?
Pra que você precisa passar o WindowEvent, se você não está utilizando o evento para nada?
Use um método externo sem evento nenhum e então chame esse método tanto para o ActionListener do JButton, quanto para o WindowListener do JFrame.
Putz, é mesmo!!!
E olha que eu já tinha usado essa técnica antes. Valeu!!!
É mesmo Vinny. Obrigado!!!
System.exit(0);
Creio q deva ser
System.exit(0);