Spec-Zone .ru
спецификации, руководства, описания, API

Модальность AWT

Этот документ, вместе с документацией API для связанных с модальностью классов (такой как java.awt.Dialog), кратко описывает новые функции модальности и как использовать их. Это содержит следующие разделы:

Определения

Документ - окно без владельца, на что, вместе со всей его дочерней иерархией, можно управлять как единственный автономный документ. Каждое окно принадлежит некоторому документу — его корень может быть найден как самое близкое окно предка без владельца.

Модальное блокированное окно - окно, что:


Предупреждение! Некоторые менеджеры окон позволяют пользователям изменять Z-порядок окна произвольным способом — в этом случае, последнее требование не может быть удовлетворено.

Модальное диалоговое окно - диалоговое окно, которое блокирует некоторые окна, в то время как это видимо. Блокированные окна определяются согласно контексту диалогового окна блокирования.

Модальное исключенное окно - окно, которое остается разблокированным, в то время как модальное диалоговое окно видимо. Если окно модально исключенный тогда, все его находящиеся в собственности окна и дочерние компоненты также исключаются.

Контекст блокирования (СУРЬМЫ) - набор окон (экземпляры java.awt.Window и все производные классы), которые блокируются модальным диалоговым окном, в то время как это видимо.


Отметьте: Всюду в этом документе понятие "окна" равно высокоуровневому окну в языке программирования Java — другими словами экземпляр java.awt.Window или любой порожденный class.

Типы модальности

Есть четыре поддерживаемых типа модальности:

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

  1. Немодальные диалоговые окна
    Немодальное диалоговое окно не блокирует окон в то время как видимый.
  2. Модальные документом диалоговые окна
    Модальное документом диалоговое окно блокирует все окна из того же самого документа кроме тех от его дочерней иерархии. Корень документа определяется как самое близкое окно предка без владельца.
  3. Модальные приложением диалоговые окна
    Модальное приложением диалоговое окно блокирует все окна из того же самого приложения за исключением тех от его дочерней иерархии. Если есть несколько апплетов, запущенных в браузере, они могут быть обработаны или как отдельные приложения или как единственное приложение. Это поведение является зависящим от реализации.
  4. Модальные инструментарием диалоговые окна
    Модальное инструментарием диалоговое окно блокирует все окна, которые работают в том же самом инструментарии кроме тех от его дочерней иерархии. Если есть несколько апплетов, запущенных, все они работают с тем же самым инструментарием, таким образом, модальное инструментарием диалоговое окно, показанное от апплета, может влиять на другие апплеты и все окна экземпляра браузера, который встраивает среду выполнения Java для этого инструментария. См. раздел безопасности ниже.

Приоритет модальности располагается силой блокирования: немодальный, модальный документом, модальный приложением и модальный инструментарием. Это расположение используется, определяя, какое диалоговое окно должно остаться разблокированным, если два видимы и блокируют друг друга. Это естественно отражает вложение контекста диалогового окна блокирования (СУРЬМЫ): у немодального диалогового окна есть пустая СУРЬМА, СУРЬМА модального документом диалогового окна полна в некоторых приложениях, и все приложения запускаются в одном инструментарии.

Примечания о владельцах:


Примечание реализации: Изменение типа модальности для видимого диалогового окна не может иметь никакого эффекта, пока это не скрывается и затем показывается снова.

Покажите/скройтесь блокирование

Показ окна или немодального диалогового окна: "F"
Все видимые модальные диалоговые окна просматриваются — если F от СУРЬМЫ одного из них, это становится блокированным этим. Если есть несколько таких диалоговых окон, показанное первое используется. Если никакие такие диалоговые окна не существуют, F остается разблокированным.

Показ модального диалогового окна: "M"
Когда модальный диалоговый М. показывают, все видимые окна попадают в одну из трех отличных групп:

После того, как модальный диалоговый М. показывают, это становится блокированным первым показанным диалоговым окном от первой группы (если есть кто-либо), все окна от второго становятся блокированными М., и все окна от третьей группы остаются нетронутыми.

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

Показ модального документом диалогового окна: "M"
Все видимое приложение - и модальные инструментарием диалоговые окна просматривается — если М. от СУРЬМЫ одного из них, это становится блокированным этим. Если есть несколько таких диалоговых окон, показанное первое используется. Если никакие такие диалоговые окна не существуют, М. остается разблокированным.

Показ модального приложением диалогового окна: "M"
Все видимые модальные инструментарием диалоговые окна просматриваются — если М. от СУРЬМЫ одного из них, это становится блокированным этим. Если есть несколько таких диалоговых окон, показанное первое используется. Если никакие такие диалоговые окна не существуют, М. остается разблокированным.

Показ модального инструментарием диалогового окна: "M"
М. остается разблокированным.

Стандартная Матрица Блокирования
ток/показывать фрейм & немодальный документ приложение инструментарий
- - - - -
документ блокированный - - -
приложение блокированный блокированный - -
инструментарий блокированный блокированный блокированный -

После того, как модальное диалоговое окно показывают, все окна от его СУРЬМЫ блокируются, кроме тех, которые блокируют это модальное диалоговое окно.

Сокрытие окна или немодального диалогового окна: "F"
Если F был блокирован каким-либо модальным диалоговым М., это становится разблокированным и удаляется из блокированного списка окон М.

Сокрытие модального диалогового окна: "M"
Если М. был блокирован каким-либо другим модальным диалоговым окном, например, "N", это становится разблокированным и удаляется из блокированного списка окон Н. Затем, все окна и диалоговые окна, блокированные М., становятся разблокированными, и после который те же самые проверки (как в Показе модального диалогового окна: "М."), выполняются для каждого из них в порядке, который им первоначально показали.

Модальное исключение

Есть два модальных типа исключения, представленные с JDK 6

По умолчанию модальное свойство исключения окна выключается.

  1. Модальное приложением исключение
    Если окно модально приложением исключенный, оно не блокируется никакими модальными приложением диалоговыми окнами. Кроме того, это не блокируется модальными документом диалоговыми окнами от за пределами его дочерней иерархии.
  2. Модальное инструментарием исключение
    Если окно модально инструментарием исключенный, оно не блокируется никаким приложением - или модальные инструментарием диалоговые окна. Кроме того, это не блокируется модальными документом диалоговыми окнами от за пределами их дочерней иерархии.


Примечание реализации: Изменение модального типа исключения для видимого окна не может иметь никакого эффекта, пока это не скрывается и затем показывается снова.

Связанные функции AWT

Поверх остальных окон
Когда модальное диалоговое окно, которое не является поверх остальных окон блоками поверх остальных окон окно, их относительный Z-порядок, является неуказанным и зависимым от платформы.

toFront() и toBack() методы
Модальное диалоговое окно должно всегда быть, прежде всего, своими блокированными окнами. Таким образом, если блокированное окно выявляется, его диалоговое окно блокирования, если таковые вообще имеются, также выявляется и остается выше блокированного окна. Аналогично, если модальное диалоговое окно отправляется спине, все ее блокированные окна отправляются спине, чтобы сохранить их ниже диалогового окна блокирования.

Уменьшение, максимизация и закрытие блокированных окон
Когда модальное диалоговое окно блокирует окно, пользователь, возможно, не в состоянии максимизировать или минимизировать блокированное окно — однако, фактическое поведение является неуказанным и зависимым от платформы. В любом случае пользователь не может закрыть блокированное окно в интерактивном режиме — но оно может быть закрыто программно, вызывая setVisible(false) или dispose() методы на блокированном окне.

Блокированные активации окон
Когда пользователь выбирает блокированное окно, оно может быть выявлено, наряду с блокирующим модальным диалоговым окном, которое тогда стало бы активным окном — однако, фактическое поведение является неуказанным и зависимым от платформы.

Сокрытие модального диалогового окна
Когда модальное диалоговое окно, которое в настоящий момент фокусируется, скрывается, это неуказанное и зависимым от платформы, который другое окно станет активным окном. Любое следующее может стать активным окном:

  1. Владелец модального диалогового окна - если владелец разблокируется.
  2. Window, который был активным перед этим модальным диалоговым окном полученный фокус - если владелец модального диалогового окна отсутствует или блокируется.
Если модальное диалоговое окно, которое будет скрыто, не фокусируется, активное окно остается неизменным.

Безопасность

Специальное предложение AWTPermission, "toolkitModality", обязан показывать модальные инструментарием диалоговые окна. Это предотвратило бы, например, блокируя браузер или Сеть Java Запускается (JWS) модальными диалоговыми окнами, показанными от апплетов.

То же самое разрешение обязано исключать окно из модальности инструментария. Это предотвратило бы, например, диалоговое окно, которое, как показывают от апплета, не было блокировано модальным диалоговым окном браузера или JWS.

Поддержка платформы

Два java.awt.Toolkit методы позволяют Вам проверять, поддерживает ли текущая платформа определенные функции модальности:

Совместимость

Тип модальности значения по умолчанию модален приложением. Это используется вызовами API: Dialog.setModal(true), Dialog(owner, true), и т.д.. До JDK 6 тип значения по умолчанию был модален инструментарием, но единственное различие между приложением - и модальность инструментария для апплетов, и приложения, запущенные от Сети Java, Запускаются.

Примеры

  1. Фрейм "F" показывают
  2. Модальное документом диалоговое окно "Ди" показывают
  3. F становится блокированным Ди — это находится в том же самом документе
  4. Модальное документом диалоговое окно "Dii" показывают
  5. Ди становится блокированной Dii — это находится в том же самом документе


  1. Фрейм "F" показывают
  2. Модальное документом диалоговое окно "Ди" показывают
  3. F становится блокированным Ди — это находится в том же самом документе
  4. Модальное документом диалоговое окно "Dii" показывают
  5. Ди становится блокированной Dii — это находится в том же самом документе
  6. Ди скрывается
  7. F становится блокированным Dii — это находится в том же самом документе


  1. Фрейм "F" показывают
  2. Модальное инструментарием диалоговое окно "Ди" создается, но не показывается
  3. Модальное документом диалоговое окно "Dii" показывают
  4. F становится блокированным Dii — это находится в том же самом документе
  5. Модальное приложением диалоговое окно "Diii" показывают
  6. Dii становится блокированным Diii — это находится в том же самом приложении
  7. Ди показывают
  8. Ди становится блокированной Dii — это - свой владелец
  9. Diii остается разблокированным — он блокирует Dii, и Dii блокирует Ди


  1. Фрейм "F" показывают
  2. Модальное инструментарием диалоговое окно "Ди" создается, но не показывается
  3. Модальное документом диалоговое окно "Dii" показывают
  4. F становится блокированным Dii — это находится в том же самом документе
  5. Модальное приложением диалоговое окно "Diii" показывают
  6. Dii становится блокированным Diii — это находится в том же самом приложении
  7. Ди показывают
  8. Diii становится блокированным Ди Ди не блокируется
  9. Ди остается разблокированной