Problema al cerrar un jframe con Swing

Javier
22 de Abril del 2005
Hola!

lo que me ocurre es que cuando le doy a la X para cerrar la ventana, capturo bien el evento y me muestra un jOptionPane para confirmar el cierre, pero siempre elija la opcion que elija, se cierra la ventana. Alguna sugerencia?

Muchas Gracias.

Aqui os pego el codigo de sta parte:

private void initialize() {
this.setIconImage(Toolkit.getDefaultToolkit().getImage(getClass().getResource("/gui/IconoPequeno.jpg"))); // Generated
this.setBounds(0, 0, 700, 500); // Generated
this.setContentPane(getJPanel()); // Generated
this.setJMenuBar(getJJMenuBar()); // Generated
this.setLocationRelativeTo(null);
this.setTitle("Mi Aplicacion");
this.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
salir()
}
});

}

private void salir(){
JOptionPane optionPane=new JOptionPane();
Object[] opciones={"Sí","No"};
//Dialogo modal SI_NO
int ret=JOptionPane.showOptionDialog(this,"¿Desea salir completamente? Los datos serán guardados.","Pregunta",JOptionPane.YES_NO_OPTION,JOptionPane.QUESTION_MESSAGE,null,opciones,opciones[0]);
//Si la opcion escogida es Si
if(ret==JOptionPane.YES_OPTION){
//Aqui hago otras cosas pero no vienen al caso
System.exit(0);
}
}

Estoyaqui
22 de Abril del 2005
Otra forma de hacerlo es ponerlo asi:

private void initialize() {
this.setIconImage(Toolkit.getDefaultToolkit().getImage(getClass().getResource("/gui/IconoPequeno.jpg"))); // Generated
this.setBounds(0, 0, 700, 500); // Generated
this.setContentPane(getJPanel()); // Generated
this.setJMenuBar(getJMenuBar()); // Generated
this.setLocationRelativeTo(null);
this.setTitle("Mi Aplicacion");
this.addWindowListener(new salir());
}

class salir implements WindowAdapter{
public void windwClosing(WindowEvent we){
JOptionPane optionPane=new JOptionPane();
Object[] opciones={"Sí","No"};
//Dialogo modal SI_NO
int ret=JOptionPane.showOptionDialog(this,"¿Desea salir completamente? Los datos serán guardados.","Pregunta",JOptionPane.YES_NO_OPTION,JOptionPane.QUESTION_MESSAGE,null,opciones,opciones[0]);
//Si la opcion escogida es Si
if(ret==JOptionPane.YES_OPTION){
//Aqui hago otras cosas pero no vienen al caso
System.exit(0);
}
}
}

NOTA: puede haber fallo con el implements, si es el caso sustituyelo por extends

No estoy seguro que funciona pero por probar.

Un saludo