Java: закрывающая проблема JDialog

В этой программе я сталкиваюсь с двумя проблемами, когда закрываю JDialog диалоговое окно не закрывается должным образом, как EXIT_ON_CLOSE. И как присвоить заголовок этому диалоговому окну.
Код

public class Dialog extends JDialog{

    public Dialog(){

        setSize(300,200);
        setLocationRelativeTo(null);
        setVisible(true);

    }

}

Основной метод

public class Main {

public static void main(String[] args) {

    Dialog frame = new Dialog();

    frame.addWindowListener(new WindowAdapter() {
        public void windowClosing(WindowEvent e) {

            int result = JOptionPane.showConfirmDialog(frame, "Are you sure you want to exit the application? ",
                    "EXIT Application", JOptionPane.YES_NO_OPTION);

            if (result == JOptionPane.YES_OPTION)
                System.exit(0);

            else if (result == JOptionPane.NO_OPTION) {

                frame.setDefaultCloseOperation(frame.DO_NOTHING_ON_CLOSE);
            }

        }
    });

}

}

person Community    schedule 15.09.2015    source источник
comment
@LuxxMiner, но DISPOSE_ON_CLOSE закройте диалог медленно, не как EXIT_ON_CLOSE и что это значит DISPOSE_ON_CLOSE   -  person    schedule 15.09.2015
comment
EXIT_ON_CLOSE завершает работу всей вашей программы, DISPOSE_ON_CLOSE в этом случае просто удаляет диалог. Это не похоже на вызов setVisible(false), потому что вы больше не можете использовать тот же диалог после его удаления.   -  person Lukas Rotter    schedule 15.09.2015
comment
@LuxxMiner Есть ли способ закрыть всю программу в JDialog   -  person    schedule 15.09.2015
comment
WindowListener переопределение метода windowClosing может достичь этого, вызвав System.exit(0); внутри него. Для JDialog нет EXIT_ON_CLOSE.   -  person Lukas Rotter    schedule 15.09.2015


Ответы (1)


не похоже на EXIT_ON_CLOSE

EXIT_ON_CLOSE не поддерживается для JDialog.

но DISPOSE_ON_CLOSE медленно закрывает диалоговое окно

Он немедленно закрывает диалоговое окно, и фокус возвращается к родительскому JFrame.

Есть ли способ закрыть всю программу в JDialog

Вам нужно закрыть рамку.

Может быть, вы пытаетесь закрыть приложение из всплывающего диалога? В таком случае ознакомьтесь с Закрытием приложения.

Он покажет вам, как:

  1. Используйте WindowListener для обработки windowClosing и отображения всплывающего диалогового окна, или
  2. используйте предложенный класс, чтобы упростить кодирование.
person camickr    schedule 15.09.2015
comment
но он показывает закрытие окна для JFrame, но я хочу манипулировать с помощью JDialog - person ; 15.09.2015
comment
@JohnDoe A Dialog по-прежнему расширяет Window, поэтому вы также можете добавить WindowListener в свой диалог. - person Lukas Rotter; 15.09.2015
comment
@LuxxMiner и camickr благодарит вас обоих за ваши ответы - person ; 15.09.2015
comment
@JohnDoe Вы не можете просто преобразовать JDialog в _2 _... Попробуйте System.exit(0), чтобы полностью закрыть программу. - person Lukas Rotter; 15.09.2015
comment
@JohnDoe, вы упускаете из виду суть этого ответа. Приложение должно иметь один основной JFrame. Затем вы можете использовать JDialog в качестве дочерних окон по мере необходимости. Обычный JDialog закроется только сам, а не все приложение. Поэтому я предлагаю вам использовать диалоговое окно подтверждения, в котором пользователю предлагается подтвердить закрытие приложения. Итак, вам нужен JFrame, а затем, когда пользователь нажимает кнопку закрытия, отображается JOptionPane (который является настраиваемым JDialog). Если пользователь нажимает кнопку «Да», диалоговое окно закроется, и приложение закроется. - person camickr; 15.09.2015
comment
@camickr Я отредактировал свой вопрос, теперь он работает нормально, но это плохой код - person ; 15.09.2015
comment
@JohnDoe, я уже говорил, что вам не следует использовать JDialog в качестве единого окна в вашем приложении. JDialog не отображается на панели задач, поэтому, если вы потеряете фокус в диалоговом окне, единственный способ вернуть его - это выполнить табуляцию во всех окнах, что не очень удобно для пользователя. Так что да, я бы посчитал этот код плохим. Кроме того, Dialog - это класс AWT, поэтому ваше имя класса сбивает с толку. Нет необходимости даже создавать класс, чтобы задать пару свойств. - person camickr; 15.09.2015
comment
@camickr, но я хочу прояснить свое представление об этом, и этот диалог предназначен только для диалогового окна пароля пользователя, когда пользователь вводит правильные учетные данные, появится рамка - person ; 15.09.2015
comment
@JohnDoe это диалоговое окно предназначено только для диалогового окна пароля пользователя, когда пользователь вводит правильные учетные данные, появляется рамка - Почему бы вам тогда не установить операцию закрытия по умолчанию для удаления? Вам не нужно закрывать всю программу, чтобы открыть другой фрейм, просто удалите диалог. - person Lukas Rotter; 15.09.2015
comment
@JohnDoe, Создайте фрейм с панелью входа. После успешного входа в систему удалите панель входа и добавьте панель приложения. Опять же, проблема с диалогом заключается в том, что он может потерять фокус, и его нелегко вернуться. В противном случае используйте предложение LuxxMiner выше. Нет необходимости выходить из JVM. - person camickr; 15.09.2015