Java Swing为EXIT_ON_CLOSE添加动作侦听器

我有一个简单的GUI:

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

我想打印出这条消息:

  System.out.println("Closed"); 

当GUI关闭时(按下X时)。 我怎样才能做到这一点?

尝试这个。

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

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!"); } }); 

另一种可能是从Window类重写dispose() 。 这样可以减少发送的消息数量,如果默认关闭操作设置为DISPOSE_ON_CLOSE ,也可以使用。

具体地说这意味着添加

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

到你的class级MyGUI

注意:不要忘记调用super.dispose()因为这会释放屏幕资源!