Контейнер Window — это пустое окно, без внутренних элементов: рамки, строки заголовка, строки меню, линеек прокрутки. Это просто прямоугольная область на экране. Окно типа Window самостоятельно, оно не содержится ни в каком контейнере, его не надо заносить в контейнер методом add (). Однако оно не связано с оконным менеджером графической системы. Следовательно, нельзя изменить его размеры, переместить в другое место экрана. Поэтому оно может быть создано только каким-нибудь уже существующим окном,
□ Window (Frame f) — создает окно, владелец которого — фрейм f;
□ Window (Window owner) — создает окно, владелец которого — уже имеющееся окно или подкласс класса Window.
Созданное конструктором окно не выводится на экран автоматически. Его следует отобразить методом setVisible(true). Убрать окно с экрана можно методом setVisible (false), а проверить, видно ли окно на экране, — логическим методом
isShowing().
Методами
setIconImage(Image icon);
setIconImages(List extends Image> icons);
можно задать один или несколько ярлыков для окна, а посмотреть их можно методом
List
Окно типа Window возможно использовать для создания всплывающих окон предупреждения, сообщения, подсказки. Для создания диалоговых окон есть подкласс Dialog, всплывающих меню — класс PopupMenu.
Видимое на экране окно выводится на передний план методом toFront () или, наоборот, помещается на задний план методом toBack ( ). Методом setAlwaysOnTop (true) можно дать указание графическому менеджеру всегда держать окно на переднем плане. Не все графические менеджеры могут выполнить это указание, поэтому такую возможность следует предварительно проверить логическим методом isAlwaysOnTopSupported (). Выполнение этого указания можно проверить логическим методом isAlwaysOnTop ( ).
Уничтожить окно, освободив занимаемые им ресурсы, можно методом dispose (). Менеджер размещения компонентов в окне по умолчанию — BorderLayout.
Окно создает свой экземпляр класса Toolkit, который можно получить методом
getToolkit() .
Кроме событий класса Component — ComponentEvent, FocusEvent, KeyEvent, MouseEvent — при изменении размеров окна, его перемещении или удалении с экрана, а также показе на экране происходит событие WindowEvent.
Контейнер
Контейнер Frame — это полноценное готовое окно со строкой заголовка, в которую помещены кнопки контекстного меню, сворачивания окна в ярлык и разворачивания во весь экран и кнопка закрытия приложения. Заголовок окна записывается в конструкторе или методом setTitle(String title). Окно окружено рамкой. В него можно установить строку меню методом setMenuBar (MenuBar mb). Это мы обсудим в конце данной главы.
На кнопке контекстного меню в левой части строки заголовка изображена дымящаяся чашечка кофе — логотип Java. Вы можете установить там другое изображение методом setIconImage(Image icon), создав предварительно изображение icon в виде объекта класса Image. Как это сделать, объясняется в
Все элементы окна Frame вычерчиваются графической оболочкой операционной системы по правилам этой оболочки. Окно Frame автоматически регистрируется в оконном менеджере графической оболочки и может перемещаться, менять размеры, сворачиваться в панель задач (task bar) с помощью мыши или клавиатуры, как "родное" окно операционной системы.
Создать окно типа Frame можно следующими конструкторами:
□ Frame () — создает окно с пустой строкой заголовка;
□ Frame(String title) — записывает аргумент title в строку заголовка;
□ Frame(GraphicsConfiguration gc) -определяет конфигурацию окна параметром gc.
□ Frame(String title, GraphicsConfiguration gc) — определяет строку заголовка title и конфигурацию окна параметром gc.
Методы класса Frame осуществляют доступ к элементам окна, но не забывайте о том, что класс Frame наследует около двухсот методов классов Component, Container и Window. В частности, наследуется менеджер размещения по умолчанию-BorderLayout.
Кроме событий класса Component — ComponentEvent, FocusEvent, KeyEvent, MouseEvent — при изменении размеров окна, его перемещении или удалении с экрана, а также показе на экране происходит событие WindowEvent.
Программа листинга 10.5 создает два окна типа Frame, в которые помещаются строки — метки Label. При закрытии основного окна щелчком по соответствующей кнопке в строке заголовка или комбинацией клавиш
import java.awt.*; import java.awt.event.*;