Как остановить программу выхода при нажатии на красный крестик в строке заголовка JFrame? - PullRequest
4 голосов
/ 19 февраля 2012

У меня есть простое Java-приложение с графическим интерфейсом, которое запрашивает у пользователя сообщение типа «Вы уверены, что хотите выйти?», Прежде чем он выйдет из программы.Хотя это работает только тогда, когда я использую свою программу выхода JButton, но когда я использую красный крестик в строке заголовка JFrame, не имеет значения, нажимаю ли я «да» или «нет» в диалоговом окне сообщения.

Для этой задачи я добавил новый WindowListener в мой JFrame с этим кодом

frame.addWindowListener(new WindowAdapter() {
    public void windowClosing(WindowEvent evt) {
        int Answer = JOptionPane.showConfirmDialog(frame, "You want to quit?", "Quit", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE);
        if (answer == JOptionPane.YES_OPTION) {
            System.exit(0);
        }
    }
});

Если я нажму нет, программа все равно закроется, как я могу остановить это действие?

1 Ответ

10 голосов
/ 19 февраля 2012

Мне кажется, что вам нужна эта строка:

frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);

Это означает, что ваш кадр не закрывается, когда вы нажимаете красный крестик в правом верхнем углу.Но это также означает, что вам нужна ваша собственная exiting-реализация, которую вы уже предоставили.

РЕДАКТИРОВАТЬ: И мне кажется, что ваш код не будет работать (я не смог проверить его, поэтому я не уверен втот).Вам нужен метод windowClosing().

frame.addWindowListener(new WindowAdapter() {
    public void windowClosing(WindowEvent e) {
         int Answer = JOptionPane.showConfirmDialog(frame, "You want to quit?", "Quit", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE);
         if (answer == JOptionPane.YES_OPTION)
             exit(frame);
    }
}
...