Estou com um problema para implementar algo com a seguinte premissa:
Quando o usuário clicar no “X” que fecha a janela, uma mensagem de confirmação deve aparecer.
Acredito que será algo que eu defino no meu frame, com o método setDefaultCloseOperation(), mas tentei com as duas opções do título do tópico e não consigo fazer a bendita caixa aparecer, alguém tem a solução pra esse tipo de caso?
Cria uma classe que implementa a interface WindowListener.
public class SuaClasse implements WindowListener{
}
Feito isso, se você usa o Eclipse, ele próprio vai solicitar a implementação dos métodos.
Mas, se vocÊ não sabe quais são, aqui vão eles:
//implementacao dos metodos WindowListener
@Override
public void windowActivated(WindowEvent e) {}
@Override
public void windowClosed(WindowEvent e) {}
@Override
public void windowClosing(WindowEvent e) {
//aqui você vai fazer a implementação que você precisa.
}
@Override
public void windowDeactivated(WindowEvent e) {}
@Override
public void windowDeiconified(WindowEvent e) {}
@Override
public void windowIconified(WindowEvent e) {}
@Override
public void windowOpened(WindowEvent e) {}
Na classe que você implementou o JFrame, você adiciona a SuaClasse para controlar os eventos.
É necessário definir o DefaultCloseOperation do seu JFrame pra DO_NOTHING_ON_CLOSE;
É mais fácil estender WindowAdapter, pois aí vc não precisa deixar tantos métodos em branco.
O link que deixei já explicava isso:
[quote]No construtor do seu JFrame defina ele como DO_NOTHING_ON_CLOSE:
Depois, adicione um WindowListener ao seu JFrame, com a confirmação:
seuFrame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent evt) {
if (JOptionPane.showConfirmationDialog(SeuFrame.this, "Deseja Fechar esta janela?", JOptionPane.YES_NO_OPTION) != JOptionPane.YES_OPTION)
return;
dispose(); //Ou System.exit(0), se for a última janela da sua aplicação
}
}):
Talvez o comando do JOptionPane esteja um pouco errado, fiz de cabeça. Mas você corrige aí, a idéia é essa.[/quote]
Valeu pela dica galera, me enrolei com outra parte do projeto e assim que desenrolar eu coloco em prática isso daqui, assim como fiz com o Timer em um outro tópico, e dou feedback.