jOpitonPane ou JDialog em Default Close Operation?

Olá mais uma vez amigos do guj.

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?

Procure por windowListener.

http://www.guj.com.br/java/200265-duvida-boba-com-jframe#1008364

Implementa o metodo windowClosing da interface WindowListener.

Vou explicar melhor…

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.

Espero ter ajudado com isso.

  1. É necessário definir o DefaultCloseOperation do seu JFrame pra DO_NOTHING_ON_CLOSE;
  2. É mais fácil estender WindowAdapter, pois aí vc não precisa deixar tantos métodos em branco.
  3. 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.

Vlw mesmo :slight_smile:

Beleza.

Espero ter ajudado.