Создать пользовательскую операцию для setDefaultCloseOperation? - PullRequest
18 голосов
/ 21 мая 2011

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

Есть идеи, как этого достичь?

Ответы [ 4 ]

35 голосов
/ 22 мая 2011

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

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);
28 голосов
/ 22 мая 2011

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

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

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

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

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

8 голосов
/ 21 мая 2011

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

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

...
public void onExit() {
  System.err.println("Exit");
  System.exit(0);
}
4 голосов
/ 21 мая 2011

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

...