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

Я хочу, чтобы приложение Java вызывало мою собственную пользовательскую функцию, когда нажата кнопка "закрыть". насколько я вижу, не может быть никакого способа, поскольку setDefaultCloseOperation вообще не имеет перегрузок.

Любая идея, как это можно достичь?

Ответы

Ответ 1

возможно, этот, но до этого прочитайте учебник 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);

Ответ 2

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

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

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

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

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

Ответ 3

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

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

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

Ответ 4

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