windowopened windowevent addwindowlistener java swing jframe windowlistener

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(); } });