logo search
Хабибуллин

Контейнер Dialog

Контейнер Dialog — это окно обычно фиксированного размера, предназначенное для ответа на сообщения приложения. Оно автоматически регистрируется в оконном менеджере графической оболочки, следовательно, его можно перемещать по экрану, менять его размеры. Но окно типа Dialog, как и его суперкласс — окно типа Window, — обязательно имеет родительское окно — владельца owner, который указывается в конструкторе.

Окно типа Dialog может быть модальным (modal), в котором надо обязательно выполнить все предписанные действия, иначе из окна нельзя будет выйти. Модальное окно блокирует родительское окно и, возможно, еще несколько окон, образующих область блокировки (scope of blocking). Заблокированные окна не могут получить фокус ввода и находятся на экране позади модального окна.

Есть четыре области блокировки, определяемые типом модальности (modality type). Тип модальности задается следующими константами вложенного перечисления

Dialog.ModalityType:

MODELESS — отсутствие блокировки;

DOCUMENT_MODAL — блокируются родительские окна, образующие один документ, при-

чем под документом здесь понимаются все окна с общим предком (document root);

APPLICATION_MODAL — блокируются родительские окна, относящиеся к одному приложению;

TOOLKIT_MODAL — блокируются родительские окна, относящиеся к одному экземпляру

класса Toolkit.

Более подробное и точное описание типов модальности приведено в документе The

AWT Modality, хранящемся в файле docs/api/java/awt/doc-files/Modality.html.

В классе Dialog определена константа DEFAULT_MODALITY_TYPE, равная APPLICATION_MODAL

в Java SE 6. Она неявно применяется в конструкторах класса и методе setModal(true).

Графическая система, в которой открыто окно, может не отрабатывать все типы модальности, поэтому в класс Toolkit введен логический метод

isModalityTypeSupported(Dialog.ModalityType modalityType), которым можно проверить тот или иной тип modalityType.

Отдельные окна можно исключить из области блокировки. Для этого в класс Window

введен метод setModalExclusionType(Dialog.ModalExclusionType excType), аргументом кото-

рого служат константы из перечисления Dialog.ModalExclusionType:

NO_EXCLUDE — отсутствие исключения;

APPLICATION_EXCLUDE — модальные окна, имеющие тип модальности APPLICATION_MODAL,

не могут блокировать это родительское окно;

TOOLKIT_EXCLUDE — модальные окна, имеющие тип модальности TOOLKIT_MODAL, не могут блокировать это родительское окно.

Опять-таки графическая система, в которой открыто окно, может не отрабатывать все эти исключения, поэтому в класс Toolkit введен еще один логический метод —

isModalExclusionTypeSupported(Dialog.ModalExclusionType excType).