2013-04-30 26 views
18

Tôi có một giao diện đơn giản:Java Swing thêm hành động Listener cho 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 
     } 
    } 

Tôi muốn in ra thông điệp này:

System.out.println("Closed"); 

Khi GUI được đóng lại (khi X được nhấn). Làm thế nào tôi có thể làm điều đó?

Trả lời

44

Hãy thử điều này.

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

Perfect câu trả lời, cảm ơn. – Sam

0

Một khả năng khác có thể là ghi đè dispose() từ lớp Window. Điều này làm giảm số lượng tin nhắn được gửi đi và cũng hoạt động nếu hoạt động đóng mặc định được đặt thành DISPOSE_ON_CLOSE.

Cụ này có nghĩa là thêm

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

đến lớp học của bạn MyGUI.

Lưu ý: đừng quên gọi super.dispose() vì điều này giải phóng tài nguyên màn hình!

0

Viết mã này trong constructor của bạn 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!"); 
     } 
    });