Spec-Zone .ru
спецификации, руководства, описания, API
След: Создание GUI С JFC/Swing
Урок: Использование Других Функций Swing
Как Использовать Модальность в Диалоговых окнах
Домашняя страница > Создание GUI С JFC/Swing > Использование Других Функций Swing

Как Использовать Модальность в Диалоговых окнах

Java™ SE 6 решил вопросы модальности, которые возникли в более ранних версиях платформы. Новая модель модальности включает разработчику к контексту, или пределу, блокированию модальности диалогового окна.

Прежде, чем проуступить с новой моделью модальности, рассмотрите следующие сроки:

В Java SE 6 было изменено поведение и модальных и немодальных диалоговых окон так, чтобы они всегда появились и сверху не только их родительских окон и всех блокированных окон также.

Следующие типы модальности поддерживаются в Java SE 6:

Дополнительно, можно установить режим исключения модальности:


Отметьте: новая модель модальности не реализует системную модальность, которая блокирует все приложения (включая приложения Java), которые выводятся на экран на рабочем столе, в то время как модальное диалоговое окно является активным.

Пример ModalityDemo демонстрирует первые три из четырех упомянутых выше типов модальности.

Четыре фрейма, чтобы демонстрировать различные типы модальности
Это число было уменьшено, чтобы соответствовать на странице.
Нажмите на изображение, чтобы просмотреть это в его естественном размере.

Попробуйте это: 
  1. Нажмите кнопку Launch, чтобы работать, ModalityDemo, используя Сеть Java™ Запускаются (загрузите JDK 6 или позже). Альтернативно, чтобы скомпилировать и выполнить пример самостоятельно, консультируйтесь, пример индексируют.Запускает приложение ModalityDemo
  2. Следующие диалоговые окна появятся:
    • Книга 1 (порождают фрейм),
    • Книга 2 (порождают фрейм),
    • Обратная связь (порождают фрейм),
    • Классика (исключенный фрейм)
  3. Переключитесь на Книгу 1, структурируют и выбирают Биографию title для книги, затем избранный OK.
  4. Биография title будет выведена на экран в title диалогового окна. Введите имя, например - "Джон", в текстовое поле.
  5. Переключитесь на Книгу 1, структурируют и изменяют title на Забавный Рассказ, затем избранный OK. Так как диалоговое окно для того, чтобы ввести имя является немодальным, можно легко переключиться на его родительский фрейм.

    Отметьте: немодальное диалоговое окно title было изменено на Забавный Рассказ.
  6. Выберите OK в немодальном диалоговом окне.
  7. Забавное модальное диалоговое окно документа рассказа появляется.
  8. Введите некоторый текст в текстовом поле. Заметьте, что это подписывается именем, которое Вы вводили в немодальном диалоговом окне.
  9. Переключитесь на немодальное диалоговое окно и попытайтесь поменять свое имя. Вы не будете в состоянии сделать так, потому что модальное диалоговое окно документа блокирует все окна в своей родительской иерархии.
  10. Выполните ту же самую последовательность операций (шаги 3 - 9) для Книжного 2 родительского фрейма.
  11. Попытайтесь переключиться на различные диалоговые окна. Вы заметите, что можно переключиться или на фрейм Классики или на фрейм Обратной связи так же как к диалоговому окну или Книжного 1 фрейма или Книжного 2 фрейма.
  12. Переключитесь на родительский фрейм Обратной связи. Избранный Уровень Самостоятельно.
  13. Диалоговое окно подтверждения появится. Попытайтесь переключиться на различные диалоговые окна. Вам только позволяют переключиться на диалоговое окно Классики, потому что стандартное диалоговое окно подтверждения является модальным диалоговым окном приложения, и это блокирует все окна из того же самого приложения. Однако, Вы заметите, что можно выбрать своего любимого классического автора во фрейме Классики. Этот фрейм был создан при использовании APPLICATION_EXCLUDE тип исключения модальности, который препятствует тому, чтобы все высокоуровневые окна были блокированы любыми модальными диалоговыми окнами приложения.

Следующий фрагмент кода показывает, как создать диалоговые окна различных типов модальности:

//The Book 1 parent frame
f1 = new JFrame("Book 1 (parent frame)");

...

//The modeless dialog box
d2 = new JDialog(f1);

...
        
//The document-modal dialog box
d3 = new JDialog(d2, "", Dialog.ModalityType.DOCUMENT_MODAL);

...

        //The Book2 parent frame
f4 = new JFrame("Book 2 (parent frame)");

...

//The modeless dialog box
d5 = new JDialog(f4);

...

//The document-modality dialog box
d6 = new JDialog(d5, "", Dialog.ModalityType.DOCUMENT_MODAL);
        
...

//The excluded frame
f7 = new JFrame("Classics (excluded frame)");
f7.setModalityExclusionType(Dialog.ModalExclusionType.APPLICATION_EXCLUDED);
        
...

//The Feedback parent frame and Confirm Dialog box
f8 = new JFrame("Feedback (parent frame)");
...

JButton b8 = new JButton("Rate yourself");
b8.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
        JOptionPane.showConfirmationDialog(null,
                                           "I really like my book",
                                           "Question (application-modal dialog)", 
                                           JOptionPane.Yes_NO_OPTION,
                                           JOptionPane.QUESTION_MESSAGE); 
    }
});

Найдите полный код демонстрационного примера в ModalityDemo.java файл.

В Java SE 6 можно создать модальное диалоговое окно документа без родителя. Поскольку Dialog class является подклассом Window class, a Dialog экземпляр автоматически становится корнем документа, если у этого нет никакого владельца. Таким образом, если такое диалоговое окно модально документом, его контекст блокирования пуст, и это ведет себя, как будто это было немодальное диалоговое окно.

API Модальности

JDialog Конструкторы class позволяют Вам создать диалоговые окна различных типов модальности.

Конструктор Цель
JDialog (Диалоговый владелец) Создает немодальное диалоговое окно с указанным Dialog владелец, но без title.
JDialog (Диалоговый владелец, булев модальный) Создает диалоговое окно с указанным Dialog владелец и модальность.
JDialog (Диалоговый владелец, Строка title) Создает немодальное диалоговое окно с указанным Dialog владелец и title.
JDialog (Диалоговый владелец, Строка title, булев модальный) Создает диалоговое окно с указанным Dialog владелец, title, и модальность.
JDialog (Диалоговый владелец, Строка title, булев модальный, gc GraphicsConfiguration) Создает диалоговое окно с указанным Dialog владелец, title, модальность, и графическая конфигурация.
JDialog (Структурируют владельца), Создает немодальное диалоговое окно без title с указанным Frame владелец. Если значение для владельца будет нулем, то совместно используемый, скрытый фрейм будет установлен как владелец диалогового окна.
JDialog (Владелец окна, Строка title, Диалоговое окно. ModalityType modalityType) Создает диалоговое окно с указанным Window владелец, title, и модальность.

Следующая таблица приводит методы, наследованные от java.awt.Dialog class.

Метод Цель
getModalityType Возвращает тип модальности для этого диалогового окна.
setModalityType Устанавливает тип модальности для этого диалогового окна. См. ModalityType для возможных типов модальности. Если данный тип модальности не поддерживается, то MODELESS тип используется. Чтобы гарантировать, что тип модальности был установлен, вызовите getModalityType() метод после вызова этого метода.

Примеры Тот API Модальности Использования

Следующая таблица приводит пример, который использует модальность в диалоговых окнах.

Пример Где Описано Примечания
ModalityDemo Этот раздел Создает диалоговые окна различных типов модальности, демонстрирует блокирование контекста для тех типов.

Проблемы с примерами? Попытайтесь Компилировать и Выполнить Примеры: FAQ.
Жалобы? Поздравление? Предложения? Дайте нам свою обратную связь.

Предыдущая страница: Как Использовать Привязки клавиш
Следующая страница: Как Напечатать Таблицы