да нет подтверждения и события окна

#swing

#swing

Вопрос:

У меня есть следующий фрагмент кода:

 addWindowListener(new WindowAdapter() {

        @Override
        public void windowClosing(WindowEvent e) {
            int result = JOptionPane.showConfirmDialog(Bookstore.this, "Are you sure to quit?", "Confirm", JOptionPane.YES_NO_OPTION);
            if (result == JOptionPane.YES_OPTION) {
                // release connection resource
                if (bookstoreConnection != null) {
                    bookstoreConnection.closeConnection();
                }
                // JFrame handles close request based on the property
                // set by invoking the setDefaultCloseOperation(...)
                Bookstore.this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            }                
        }
    });
  

и всякий раз, когда я нажимаю кнопку [x] в правом верхнем углу, рамка исчезает независимо от того, какой вариант я выбрал. В этом случае я хочу знать, как сохранить окно фрейма, если я не выберу опцию. Спасибо!

Ответ №1:

Используйте это setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE) как операцию закрытия по умолчанию для вашего подкласса JFrame (я не помню, используется ли это по умолчанию, если вы явно не добавляете setDefaultCloseOperation(...) с другим значением)

DO_NOTHING_ON_CLOSE (определено в WindowConstants): ничего не делать; требовать от программы обработки операции в методе windowClosing зарегистрированного объекта WindowListener.

http://download.oracle.com/javase/1.3/docs/api/javax/swing/JFrame.html#setDefaultCloseOperation (int)

Комментарии:

1. привет, если вы не используете объект WindowListener, как вы можете закрыть все ресурсы, такие как подключение к базе данных, перед полным закрытием вашего приложения?

2. Но разве вы не используете прослушиватель окон?

3. да, я использовал прослушиватель окон для выполнения закрытия ресурса подключения к базе данных и выхода из окна, если выбран параметр «ДА», но проблема, с которой я сталкиваюсь сейчас, заключается в том, что если я не выбираю опцию, приложение все еще работает в фоновом режиме, но окно фрейма исчезает

4. @Final Illusion Предложение Anreas работает для меня, если это не для вас, в вашем коде есть какая-то проблема, тогда пришло время для sscce