windowevent - windowlistener in java
Java Swing agrega Action Listener para EXIT_ON_CLOSE (3)
Tengo una interfaz gráfica de usuario simple:
public class MyGUI extends JFrame{
public MyGUI(){
run();
}
void run(){
setSize(100, 100);
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);// maybe an action listener here
}
}
Me gustaría imprimir este mensaje:
System.out.println("Closed");
Cuando la GUI está cerrada (cuando se presiona la X). ¿Cómo puedo hacer eso?
Escribe este código dentro del constructor de tu JFrame :
this.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
this.addWindowListener(new java.awt.event.WindowAdapter() {
@Override
public void windowClosing(java.awt.event.WindowEvent e) {
System.out.println("Uncomment following to open another window!");
//MainPage m = new MainPage();
//m.setVisible(true);
e.getWindow().dispose();
System.out.println("JFrame Closed!");
}
});
Otra posibilidad podría ser anular dispose()
de la clase Window
. Esto reduce la cantidad de mensajes enviados y también funciona si la operación de cierre predeterminada se establece en DISPOSE_ON_CLOSE
.
Concretamente esto significa sumar
@Override
public void dispose() {
System.out.println("Closed");
super.dispose();
}
a tu clase MyGUI
.
Nota: ¡no olvide llamar a super.dispose()
ya que esto libera los recursos de la pantalla!
Prueba esto.
addWindowListener(new WindowAdapter()
{
@Override
public void windowClosing(WindowEvent e)
{
System.out.println("Closed");
e.getWindow().dispose();
}
});