Java Swing добавляет прослушиватель событий для EXIT_ON_CLOSE

19

У меня простой 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). Как я могу это сделать?

    
задан Sam 30.04.2013 в 10:58
источник

3 ответа

46

Попробуйте это.

    addWindowListener(new WindowAdapter()
        {
            @Override
            public void windowClosing(WindowEvent e)
            {
                System.out.println("Closed");
                e.getWindow().dispose();
            }
        });
    
ответ дан prasanth 30.04.2013 в 11:04
источник
  • Отличный ответ, спасибо. –  Sam 30.04.2013 в 11:12
1

Напишите этот код внутри конструктора вашего 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!");
    }
});
    
ответ дан ersks 30.08.2017 в 08:52
источник
0

Другой возможностью может быть переопределение dispose() из класса Window . Это уменьшает количество отправленных сообщений и также работает, если для операции закрытия по умолчанию установлено значение DISPOSE_ON_CLOSE .

Конкретно это означает добавление

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

для вашего класса MyGUI .

Примечание. Не забудьте вызвать super.dispose() , так как это освободит ресурсы экрана!

    
ответ дан Mr Tsjolder 26.02.2016 в 15:37
источник