Создать пользовательскую операцию для setDefaultCloseOperation?

Я хочу, чтобы мое приложение Java вызывало мою собственную выполненную на заказ функцию при нажатии кнопки" Закрыть". насколько я понимаю, с тех пор не может быть никакого способа!--0--> нет перегрузки на всех.

есть идеи, как этого можно достичь?

4 ответов


может быть, этот, но перед этим прочитайте учебник WindowListener опубликовано Howard, есть некоторые / другие варианты

WindowListener exitListener = new WindowAdapter() {

    @Override
    public void windowClosing(WindowEvent e) {
        int confirm = JOptionPane.showOptionDialog(
             null, "Are You Sure to Close Application?", 
             "Exit Confirmation", JOptionPane.YES_NO_OPTION, 
             JOptionPane.QUESTION_MESSAGE, null, null, null);
        if (confirm == 0) {
           System.exit(0);
        }
    }
};
frame.addWindowListener(exitListener);

все вышеперечисленные предложения верны в том, что вам нужно использовать WindowListener.

однако все ответы также являются неполными в том, что они забывают упомянуть, что вы также можете добавить:

frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
frame.addWindowListener(...);

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

закрытие приложения имеет простой API, который позволяет создать простое действие, которое выполняется, когда окно закрыто. Он управляет операцией закрытия и кодом прослушивателя окна для вас.


вы можете добавить слушателя окна за кадра:

frame.addWindowListener(new WindowAdapter() {
   public void windowClosing(WindowEvent evt) {
     onExit();
   }
  });

...
public void onExit() {
  System.err.println("Exit");
  System.exit(0);
}

вы можете добавить WindowListener к вашему кадру (см., например,здесь).