Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
82
Добавлен:
24.02.2016
Размер:
257.54 Кб
Скачать

Контейнеры

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

Класс контейнеров Сontainer- подкласс класса Component. Существует два вида основных вида контейнеров:панели(класс Panel, подклассом которого является класс Applet) иокна(класс Window, подклассами которого являются Frame и Dialog. Контейнеры имеют следующие деревья наследования:

Object -> Component -> Сontainer -> Panel

Object -> Component -> Сontainer -> Panel -> Applet

Object -> Component -> Container -> Window

Object -> Component -> Container -> Window -> Frame

Object -> Component -> Container -> Window -> Dialog

Object -> Component -> Container -> Window -> Dialog -> FileDialog

В случаях сложного интерфейса контейнеры позволяю объединять элементы управления в смысловые группы и по-разному размещать эти группы элементов относительно друг друга. Так, например, в окне апплета можно создать несколько панелей, разделяющих его на части. Отдельные панели могут содержать в себе такие компоненты, как кнопки, переключатели и другие компоненты.

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

Класс Container имеет методы, при помощи которых происходит управление введенными в него компонентами, установка менеджеров размещения и др.

Некоторые методы класса Container:

  • countComponents - Возвращает число содержащихся в контейнере компонент

  • getComponent - Возвращает компонент контейнера

  • getComponents - Возвращает все компоненты контейнера

  • add - Добавляет компонент в контейнер

  • remove - Удаляет компонент из контейнера

  • removeAll - Удаляет все компоненты из контейнера

  • getLayout - Указывает на менеджер компоновки данного контейнера

  • setLayout - Устанавливает менеджер компоновки данного контейнера

  • layout - Выполняет размещение компонент внутри контейнера

  • prefferedSize - Возвращает предпочтительный размер контейнера

  • minimumSize - Возвращает минимальный размер контейнера

  • paintComponents - Отображает компоненты контейнера

  • deliverEvent - Отыскивает нужный компонент и доставляет ему событие

  • locate - Возвращает компонент, содержащий заданную точку

  • insets - Возвращает вкладки контейнера. Они показывают размер границ контейнера. Например, у фрейма будет верхняя вкладка, высота которой соответствует высоте строки заголовка

Панели

Панель (класс Panel) является наиболее общим видом контейнеров в Java. Панель можно использовать как внутри другого контейнера (например, фрейма или апплета), так и непосредственно в окне WWW-броузера. Когда интерфейс состоит из большого количества элементов, почти всегда есть смысл объединить группы связанных по смыслу элементов с помощью панелей.Панель может иметь свой собственный менеджер размещения (по умолчанию этоFlowLayout), независимый от менеджера размещения контейнера, в который эта панель входит.

Класс Panelимеет подклассApplet, так что апплеты рассматриваются как расширение класса панелей. Панели очень часто используются в апплетах, имеющий сложный графический интерфейс пользователя.

Создание панелей

Панель создается достаточно просто. Прежде всего необходимо выбрать для окна апплета (или другого контейнера) схему размещения, соответствующую необходимому расположению панелей. Например, для создания в окне апплета двух панелей, разделяющих его по горизонтали, следует выбрать режим GridLayout, используя метод setLayout()контейнера, в данном случае апплета:

setLayout(new GridLayout(2,1)); // установка менеджера размещения

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

Далее нужно создать объекты класса Panel:

Panel top, bottom; // объявление панелей

top=new Panel(); // создание верхней панели

bottom=new Panel(); // создание нижней панели

Добавление панелей в контейнеры

Для добавление любых компонент (и панелей тоже) в любой контейнер используется метод add()контейнера:

add(top); // ввод верхней панели в контейнер (например, в апплет)

add(bottom); // ввод нижней панели в контейнер (например, в апплет)

Нужно заметить, что можно добавлять панели в панели, применяя к ним аналогичные действия. Например, добавим в верхнюю панель две панели:

top.setLayout(new GridLayout(1,2)); // установка менеджера размещения

Panel left, right; // объявление панелей

left=new Panel(); // создание левой панели

right=new Panel(); // создание правой панели

top.add(left); // ввод левой панели в панель top

top.add(right); // ввод правой панели в панель top

Добавление компонент в панели

Для добавления компонент в панели (элементов управления или других контейнеров) необходимо указывать, в какую панель вводится тот или иной компонент, например:

Button btn1, btn2; // объявление кнопок

btn1=new Button("Yes"); // создание первой кнопки

btn2=new Button("Cancel"); // создание второй кнопки

bottom.add(btn1); // ввод первой кнопки в панель bottom

bottom.add(btn2); // ввод второй кнопки в панель bottom

Рисование в окне панели

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

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

public void paint(Graphic g) // метод апплета, g - контекст апплета

{ // gDrawPanel контекст панели DrawPanel

Graphics gDrawPanel=DrawPanel.getGraphics();

// теперь можно рисовать в окне панели

gDrawPanel.drawString("Text inside panel",10,10);

}

Второй способ рисования в панеляхоснован насоздании собственного класса на базе класса Panel и переопределения в этом классе метода paint(). Естественно, этому методу paint() передается в качестве параметра контекст отображения панели.

Окна

Окна (класс Window), как и панели, являются общим классом контейнеров. Но в отличие от панелей окно Java представляет собойокно - объект операционной системы,существующий отдельно от окна WWW-броузера или программы просмотра апплетов.

Непосредственно класс Window никогда не используется, а используются три его подкласса Frame, Dialog и FileDialog. Каждый их этих подклассов содержит все функции исходного класса Window, добавляя к ним несколько специфических свойств (см. описание методов этих подклассов ниже).

Некоторые методы класса Window:

  • Window - Конструктор, который создает окно, первоначально не видимое. Окно ведет себя как модальное диалоговое окно, т.е. пока это окно отображается, оно блокирует ввод в другие окна. В качестве параметра конструктору передается владелец окна - объект класса Frame

  • show - Отображает окно. Окно появится на переднем плане, если оно было видимым до этого

  • dispose - Удаляет окно. Этот метод необходимо вызвать для освобождения ресурсов, занимаемых окном

  • toFront - Переносит рамку на передний план окна

  • toBack - Переносит рамку на задний план окна

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

При создании окна обязательным параметром конструктора Window() является объект класса Frame. Этот объект можно создать непосредственно при вызове конструктора окна. Так как окна изначально создаются невидимыми, отобразить их на экране можно, лишь вызвав метод show(). Правда, перед этим иногда полезно придать окну нужные размеры и разместить окно в нужной позиции. Если перемещать окно в видимом состоянии, то это может вызвать неприятное мерцание на экране. Приведем пример создания окна и отображения окна:

Window win=new Window(new Frame()); // создание окна

win.resize(200,300); // изменение его размеров

win.move(50,50); // перемещение окна

win.show(); // отображение окна

Если окно видимо, то его можно сделать невидимым при помощи метода hide(). Этот метод не удаляет объект окна, просто он делает окно невидимым.