Создать пользовательскую операцию для 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
к вашему фрейму (см., например, здесь).