2013-04-30 12 views
18

Ho una semplice interfaccia grafica:Java Swing aggiungendo action listener per EXIT_ON_CLOSE

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 
     } 
    } 

Vorrei stampare questo messaggio:

System.out.println("Closed"); 

Quando la GUI è chiuso (quando si preme il X). Come lo posso fare?

risposta

44

Prova questo.

addWindowListener(new WindowAdapter() 
     { 
      @Override 
      public void windowClosing(WindowEvent e) 
      { 
       System.out.println("Closed"); 
       e.getWindow().dispose(); 
      } 
     }); 
+0

risposta perfetta, grazie. – Sam

0

Un'altra possibilità potrebbe essere quella di ignorare dispose() dalla classe Window. Ciò riduce il numero di messaggi inviati in giro e funziona anche se l'operazione di chiusura predefinita è impostata su DISPOSE_ON_CLOSE.

Concretamente questo significa aggiungere

@Override 
public void dispose() { 
    System.out.println("Closed"); 
    super.dispose(); 
} 

alla classe MyGUI.

Nota: non dimenticare di chiamare lo super.dispose() poiché questo rilascia le risorse dello schermo!

0

Scrivi questo codice nel costruttore della vostra 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!"); 
     } 
    });