Como inserir mensagem de alerta quando a janela for fechada?

Olá!

Tentei adicionar uma mensagem de alerta de segurança para o usuário quando ele for fechando a janela de cadastro, mas não funcionou.
Eu fiz o seguinte:

Defini o evento windowClosing no frame e adicionei o seguinte metodo:

Object[] options = {"Sim", "Não"}; int i = JOptionPane.showOptionDialog(null, "Tem certeza que deseja fechar esta janela?", "Saída", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, null, options, options[1]); if (i == JOptionPane.YES_OPTION) { System.exit(0); }

Mas a janela fecha independente da escolha! :frowning:

        // Isso no Janela
	setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);
	addWindowListener(new java.awt.event.WindowAdapter() {
		@Override
		public void windowClosing(WindowEvent e) {
				if (e.getID() == WindowEvent.WINDOW_CLOSING) {
					sair();
				}
			}
		});	

        // método para saida
        public void sair() {
		String[] textMessages = { "Sim", "Não", "Cancelar" };
		if (JOptionPane.showOptionDialog(null, "Deseja realmente sair?",
				"Atenção", JOptionPane.YES_OPTION,
				JOptionPane.QUESTION_MESSAGE, null, textMessages, null) == 0) {
			System.exit(0);
		} 
	}

Olá!

Inseri o evento a seguir no escorpo do formulario:

public CadastrarAutor() { setDefaultCloseOperation(DO_NOTHING_ON_CLOSE); addWindowListener(new java.awt.event.WindowAdapter() { @Override public void windowClosing(WindowEvent e) { if (e.getID() == WindowEvent.WINDOW_CLOSING) { sair(); } } }); }

E coloque o seguinte metodo sair dentro do frame mesmo.

public void sair() { String[] textMessages = { "Sim", "Não", "Cancelar" }; if (JOptionPane.showOptionDialog(null, "Deseja realmente sair?", "Atenção", JOptionPane.YES_OPTION, JOptionPane.QUESTION_MESSAGE, null, textMessages, null) == 0) { System.exit(0); } }

Belezza, aparece a mensagem de alerta, e as opções para o usuario escolher, mas qualquer que seja a escolha ela sempre fecha. :frowning:

veja se resolve.

[code]import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import javax.swing.JFrame;
import javax.swing.JOptionPane;

public class TesteGuj extends JFrame {

public TesteGuj() {

	this.addWindowListener(new WindowAdapter() {
		public void windowClosing(java.awt.event.WindowEvent e) {
			if (e.getID() == WindowEvent.WINDOW_CLOSING) {
				int selectedOption = JOptionPane.showConfirmDialog(null,"Deseja Sair Realmente?", "Sair",JOptionPane.YES_NO_OPTION);
				if (selectedOption == JOptionPane.YES_OPTION) {

					System.exit(0);
				}
			}
		}
	});

	this.setSize(300,300);
}

public static void main(String[] args) {
	new TesteGuj().setVisible(true);
}

}
[/code]