Java Swing在关闭时为退出添加操作侦听器

Java Swing在关闭时为退出添加操作侦听器,java,swing,jframe,windowlistener,Java,Swing,Jframe,Windowlistener,我有一个简单的GUI: public class MyGUI extends JFrame{ public MyGUI(){ run(); } void run(){ setSize(100, 100); setVisible(true); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);// maybe

我有一个简单的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();
            }
        });

另一种可能是从
窗口
类重写。这会减少发送的消息数量,如果默认的关闭操作设置为
DISPOSE\u ON\u close
,也会起作用

具体地说,这意味着增加

@Override
public void dispose() {
    System.out.println("Closed");
    super.dispose();
}
到您的类
MyGUI


注意:不要忘记调用
super.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!");
    }
});

窗口事件: 这里有完整的程序,希望对您有所帮助。 公共类应用程序{

public static void main(String[] args) {
    //Frame
    JFrame window = new JFrame();
    //Title:setTitle()
    window.setTitle("First GUI App");
    //Size: setSize(width, height)
    window.setSize(600, 300);
    //Show: setVisible()
    window.setVisible(true);
    //Close
    window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    window.addWindowListener(new WindowAdapter() {


        @Override
        public void windowClosing(WindowEvent e) {
            super.windowClosing(e); 
            JOptionPane.showConfirmDialog(null,"Are sure to close!");
        }

        @Override
        public void windowOpened(WindowEvent e) {
            super.windowOpened(e); 
            JOptionPane.showMessageDialog(null, "Welcome to the System");
        }

    });

}
}