Этот документ, вместе с документацией API для связанных с модальностью классов (такой как java.awt.Dialog), кратко описывает новые функции модальности и как использовать их. Это содержит следующие разделы:
Документ - окно без владельца, на что, вместе со всей его дочерней иерархией, можно управлять как единственный автономный документ. Каждое окно принадлежит некоторому документу — его корень может быть найден как самое близкое окно предка без владельца.
Модальное блокированное окно - окно, что:
не получает событий ввода данных пользователем
не получает фокус ввода
сохраняет его Z-порядок ниже модального диалогового окна, которое блокирует это
Предупреждение! Некоторые менеджеры окон позволяют пользователям изменять Z-порядок окна произвольным способом — в этом случае, последнее требование не может быть удовлетворено.
Модальное диалоговое окно - диалоговое окно, которое блокирует некоторые окна, в то время как это видимо. Блокированные окна определяются согласно контексту диалогового окна блокирования.
Модальное исключенное окно - окно, которое остается разблокированным, в то время как модальное диалоговое окно видимо. Если окно модально исключенный тогда, все его находящиеся в собственности окна и дочерние компоненты также исключаются.
Контекст блокирования (СУРЬМЫ) - набор окон (экземпляры java.awt.Window и все производные классы), которые блокируются модальным диалоговым окном, в то время как это видимо.
Отметьте: Всюду в этом документе понятие "окна" равно высокоуровневому окну в языке программирования Java — другими словами экземпляр java.awt.Window или любой класс-потомок.
Типы модальности
Есть четыре поддерживаемых типа модальности:
инструментарий
приложение
документ
немодальный
Диалоговое окно является, по умолчанию, немодальным. Модальное диалоговое окно, по умолчанию, модально приложением.
Немодальные диалоговые окна Немодальное диалоговое окно не блокирует окон в то время как видимый.
Модальные документом диалоговые окна Модальное документом диалоговое окно блокирует все окна из того же самого документа кроме тех от его дочерней иерархии. Корень документа определяется как самое близкое окно предка без владельца.
Модальные приложением диалоговые окна Модальное приложением диалоговое окно блокирует все окна из того же самого приложения за исключением тех от его дочерней иерархии. Если есть несколько апплетов, запущенных в браузере, они могут быть обработаны или как отдельные приложения или как единственное приложение. Это поведение является зависящим от реализации.
Модальные инструментарием диалоговые окна Модальное инструментарием диалоговое окно блокирует все окна, которые работают в том же самом инструментарии кроме тех от его дочерней иерархии. Если есть несколько апплетов, запущенных, все они работают с тем же самым инструментарием, таким образом, модальное инструментарием диалоговое окно, показанное от апплета, может влиять на другие апплеты и все окна экземпляра браузера, который встраивает среду выполнения Java для этого инструментария. См. раздел безопасности ниже.
Приоритет модальности располагается силой блокирования: немодальный, модальный документом, модальный приложением и модальный инструментарием. Это расположение используется, определяя, какое диалоговое окно должно остаться разблокированным, если два видимы и блокируют друг друга. Это естественно отражает вложение контекста диалогового окна блокирования (СУРЬМЫ): у немодального диалогового окна есть пустая СУРЬМА, СУРЬМА модального документом диалогового окна полна в некоторых приложениях, и все приложения запускаются в одном инструментарии.
Примечания о владельцах:
Создание модального документом диалогового окна без владельца: С тех пор Dialog класс, полученный из Window, a Dialog экземпляр автоматически становится корнем документа, если у этого нет никакого владельца. Таким образом, если такое диалоговое окно модально документом, его контекст блокирования пуст, и это ведет себя тот же самый путь как немодальное диалоговое окно.
Создание модального приложением или модального инструментарием диалогового окна с владельцем: Контекст блокирования для приложения - или модальное инструментарием диалоговое окно, в противоположность модальному документом диалоговому окну, не зависит от его владельца. Таким образом в этом случае единственной вещью, на которую влияет владелец, является Z-порядок: диалоговое окно всегда остается сверху его владельца.
Примечание реализации: Изменение типа модальности для видимого диалогового окна не может иметь никакого эффекта, пока это не скрывается и затем показывается снова.
Покажите/скройтесь блокирование
Показ окна или немодального диалогового окна: "F" Все видимые модальные диалоговые окна просматриваются — если F от СУРЬМЫ одного из них, это становится блокированным этим. Если есть несколько таких диалоговых окон, показанное первое используется. Если никакие такие диалоговые окна не существуют, F остается разблокированным.
Показ модального диалогового окна: "M" Когда модальный диалоговый М. показывают, все видимые окна попадают в одну из трех отличных групп:
Блокировщики М. (модальные диалоговые окна, которые блокируют М. и или находятся в дочерней иерархии М., или не блокируются М., или имеют больший режим модальности, или блокируют некоторый другой блокировщик M),
Блокированный М. (окна от СУРЬМЫ М., которые не являются блокировщиками и не находятся в дочерней иерархии никакого блокировщика),
Все другие окна (окна или немодальные диалоговые окна вне СУРЬМЫ М. и модальные диалоговые окна вне СУРЬМЫ М., которые не блокируют M).
После того, как модальный диалоговый М. показывают, это становится блокированным первым показанным диалоговым окном от первой группы (если есть кто-либо), все окна от второго становятся блокированными М., и все окна от третьей группы остаются нетронутыми.
В типичных случаях, когда никакие дочерние диалоговые окна не показывают перед их владельцами, может быть упрощено это правило. (Следующий, упрощенный случай, может не учесть некоторые детали).
Показ модального документом диалогового окна: "M" Все видимое приложение - и модальные инструментарием диалоговые окна просматривается — если М. от СУРЬМЫ одного из них, это становится блокированным этим. Если есть несколько таких диалоговых окон, показанное первое используется. Если никакие такие диалоговые окна не существуют, М. остается разблокированным.
Показ модального приложением диалогового окна: "M" Все видимые модальные инструментарием диалоговые окна просматриваются — если М. от СУРЬМЫ одного из них, это становится блокированным этим. Если есть несколько таких диалоговых окон, показанное первое используется. Если никакие такие диалоговые окна не существуют, М. остается разблокированным.
Показ модального инструментарием диалогового окна: "M" М. остается разблокированным.
Стандартная Матрица Блокирования
ток/показывать
фрейм & немодальный
документ
приложение
инструментарий
-
-
-
-
-
документ
блокированный
-
-
-
приложение
блокированный
блокированный
-
-
инструментарий
блокированный
блокированный
блокированный
-
После того, как модальное диалоговое окно показывают, все окна от его СУРЬМЫ блокируются, кроме тех, которые блокируют это модальное диалоговое окно.
Сокрытие окна или немодального диалогового окна: "F" Если F был блокирован каким-либо модальным диалоговым М., это становится разблокированным и удаляется из блокированного списка окон М.
Сокрытие модального диалогового окна: "M" Если М. был блокирован каким-либо другим модальным диалоговым окном, например, "N", это становится разблокированным и удаляется из блокированного списка окон Н. Затем, все окна и диалоговые окна, блокированные М., становятся разблокированными, и после который те же самые проверки (как в Показе модального диалогового окна: "М."), выполняются для каждого из них в порядке, который им первоначально показали.
Модальное исключение
Есть два модальных типа исключения, представленные с JDK 6
Исключение из блокирования модальных инструментарием диалоговых окон
Исключение из блокирования модальных приложением диалоговых окон
По умолчанию модальное свойство исключения окна выключается.
Модальное приложением исключение Если окно модально приложением исключенный, оно не блокируется никакими модальными приложением диалоговыми окнами. Кроме того, это не блокируется модальными документом диалоговыми окнами от за пределами его дочерней иерархии.
Модальное инструментарием исключение Если окно модально инструментарием исключенный, оно не блокируется никаким приложением - или модальные инструментарием диалоговые окна. Кроме того, это не блокируется модальными документом диалоговыми окнами от за пределами их дочерней иерархии.
Примечание реализации: Изменение модального типа исключения для видимого окна не может иметь никакого эффекта, пока это не скрывается и затем показывается снова.
Специальное предложение AWTPermission, "toolkitModality", обязан показывать модальные инструментарием диалоговые окна. Это предотвратило бы, например, блокируя браузер или Java веб-Запуск (JWS) модальными диалоговыми окнами, показанными от апплетов.
То же самое разрешение обязано исключать окно из модальности инструментария. Это предотвратило бы, например, диалоговое окно, которое, как показывают от апплета, не было блокировано модальным диалоговым окном браузера или JWS.
Поддержка платформы
Два java.awt.Toolkit методы позволяют Вам проверять, поддерживает ли текущая платформа определенные функции модальности:
isModalityTypeSupported(modalityType) Возвраты, поддерживается ли указанный тип модальности на текущей платформе. Если режим "M" не поддерживается, и диалоговое окно устанавливается в М. модального, это ведет себя как немодальный.
isModalExclusionTypeSupported(modalExclusionType) Возвраты, поддерживается ли данный модальный тип исключения на текущей платформе. Если тип "E" исключения не поддерживается, и окно отмечается как электронный исключено, это не имеет никакого эффекта.
Совместимость
Тип модальности по умолчанию модален приложением. Это используется вызовами API: Dialog.setModal(true), Dialog(owner, true), и т.д.. До JDK 6 тип по умолчанию был модален инструментарием, но единственное различие между приложением - и модальность инструментария для апплетов и приложений, запущенных от Java веб-Запуск.