2013-04-30 8 views
18

Mam proste GUI:Java Swing dodanie działania słuchacza 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 
     } 
    } 

chciałbym wydrukować komunikat:

System.out.println("Closed"); 

Gdy GUI jest zamknięta (gdy X jest wciśnięty). Jak mogę to zrobić?

Odpowiedz

44

Spróbuj tego.

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

Doskonała odpowiedź, dzięki. – Sam

0

Inną możliwością może być zastąpić dispose() z klasy Window. Zmniejsza to liczbę wysyłanych wiadomości, a także działa, jeśli domyślna operacja zamknięcia jest ustawiona na DISPOSE_ON_CLOSE.

Konkretnie oznacza to dodanie

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

do klasy MyGUI.

Uwaga: nie zapomnij zadzwonić pod numer super.dispose(), ponieważ spowoduje to zwolnienie zasobów ekranu!

0

napisać ten kod w ciągu konstruktora swojej 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!"); 
     } 
    });