Смекни!
smekni.com

Программирование графики и обработка событий (стр. 2 из 4)

Класс CheckboxGroup

Класс CheckboxGroup очень мал, поскольку его задача — просто дать общее имя всем объектам Checkbox, образующим одну группу. В него входит один конструктор по умолчанию CheckboxGroup() и два метода доступа:

· getSelectedCheckbox(), возвращающий выбранный объект Checkbox;

· setSelectedCheckbox (Checkbox box), задающий выбор.

Как создать группу радиокнопок

Чтобы организовать группу радиокнопок, надо сначала сформировать объект класса CheckboxGroup, а затем создавать кнопки конструкторами

Checkbox(String label, CheckboxGroup group, boolean state)

Checkbox(String label, boolean state, CheckboxGroup group)

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

Только одна радиокнопка в группе может иметь состояние state = true.

Компонент Choice

Компонент Сhoice — это раскрывающийся список, один, выбранный, пункт (item) которого виден в поле, а другие появляются при щелчке кнопкой мыши на небольшой кнопке справа от поля компонента.

Вначале конструктором Choice() создается пустой список.

Затем, методом add (String text), в список добавляются новые пункты с текстом text. Они располагаются в порядке написания методов add() и нумеруются от нуля.

Вставить новый пункт в нужное место можно методом

insert (string text,int position).

Выбор пункта можно произвести из программы методом select (String text) или select(int position).

Удалить один пункт из списка можно методом remove (String text) или remove (int position), а все пункты сразу — методом removeAll().

Число пунктов в списке можно узнать методом getItemCount ().

Выяснить, какой пункт находится в позиции pos можно методом getItem(int pos), возвращающим строку.

Наконец, определение выбранного пункта производится методом getSelectedIndex(), возвращающим позицию этого пункта, или методом getSelectedItem(), возвращающим выделенную строку.

События

В классе Choice происходят события класса Component: ComponentEvent, FocusEvent, KeyEvent, MouseEvent, а при выборе пункта возникает событие ItemEvent.

Если надо показать на экране несколько пунктов списка, то в этом случае используется объект класса List.

Компонент TextField

Компонент TextField — это поле для ввода одной строки текста. Ширина поля измеряется в колонках (column). Ширина колонки — это средняя ширина символа в шрифте, которым вводится текст. Нажатие клавиши <Enter> заканчивает ввод и служит сигналом к началу обработки введенного текста, т. е. при этом происходит событие ActionEvent.

В классе четыре конструктора:

· TextField() — создает пустое поле шириной в одну колонку;

· TextField(int columns) — создает пустое поле с числом колонок columns;

· TextField(String text) — создает поле с текстом text;

· TextField(String text, int columns) — создает поле с текстом text и числом колонок columns.

Интересная разновидность поля ввода — поле для ввода пароля. В таком поле вместо вводимых символов появляется какой-нибудь особый эхо-символ, чаще всего звездочка, чтобы пароль никто не подсмотрел через плечо.

Данное поле ввода получается выполнением метода setEchoChar(char echo). Аргумент echo — это символ, который будет появляться в поле. Проверить, установлен ли эхо-символ, можно логическим методом echoCharisSet(), получить эхо-символ — методом getEchoChar ().

Чтобы вернуть поле ввода в обычное состояние, достаточно выполнить метод setEchoChar(0).

События

Кроме событий класса Component: ComponentEvent, FocusEvent, KeyEvent, MouseEvent, при изменении текста пользователем происходит событие TextEvent, а при нажатии на клавишу <Enter> — событие ActionEvent.

Контейнер Framе

Контейнер Frame — это полноценное готовое окно со строкой заголовка, в которую помещены кнопки контекстного меню, сворачивания окна в ярлык и разворачивания во весь экран и кнопка закрытия приложения. Заголовок окна записывается в конструкторе или методом setTitle(String title).

На кнопке контекстного меню в левой части строки заголовка изображена дымящаяся чашечка кофе — логотип Java. Вы можете установить там другое изображение методом setIconImage(image icon), создав предварительно изображение icon в виде объекта класса image.

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

Создать окно типа Frame можно следующими конструкторами:

· Frame () — создает окно с пустой строкой заголовка;

· Frame (String title) — записывает аргумент title в строку заголовка.

Методы класса Frame осуществляют доступ к элементам окна, но также класс Frame наследует около двухсот методов классов Component, Container и Window. В частности, наследуется менеджер размещения по умолчанию — BorderLayout.

События

Кроме событий класса Component: ComponentEvent, FocusEvent, KeyEvent, MouseEvent, при изменении размеров окна, его перемещении или удалении с экрана, а также показа на экране происходит событие windowEvent.

Приложение 4. Менеджеры размещения.

Для того чтобы размещение компонентов в окне не нарушалось при движении, переносе и т.д. используются менеджеры размещения или компоновки (layout managers), называемые иногда просто компоновщиками.

Программист может воспользоваться стандартными менеджерами размещения или написать свои собственные, реализовав интерфейсы LayoutManager или LayoutManager2. К стандартным менеджерам размещения относятся:

Класс Описание
null абсолютное позиционирование при размещении компонентов в контейнере
FlowLayout компоненты размещаются в контейнере один за другим: слева направо, сверху вниз
BorderLayout компоненты размещаются в контейнере в порядке сторон света – “Север”, “Восток”, “Юг”, “Запад”, “Центр”
GridLayout компоненты размещаются в контейнере в клетках таблицы; каждый элемент занимает одну клетку
GridBagLayout компоненты размещаются в контейнере в клетках таблицы; каждый элемент может занимать более одной клетки; является наиболее гибким компоновщиком
CardLayout одновременно доступен один компонент контейнера; идеальный менеджер компоновки для создания составных компонентов, похожих на “записные” книжки в Windows

Менеджеры размещения могут быть скомбинированы друг с другом.

По умолчанию в панелях и аплетах используется менеджер размещения FlowLayout, а в окнах и диалоговых окнах – BorderLayout.

Установка менеджера размещения для текущего контейнера осуществляется при помощи вызова:

контейнер.setLayout(new конструкторМенеджераРазмещения(параметры))

Менеджер абсолютного размещения

Объявление того, что контейнер имеет менеджер размещения с абсолютным позиционированием компонентов, имеет вид:

контейнер.setLayout(null)

Установка границ каждого компонента осуществляется при помощи метода:

компонент.setSize(координатаХ, координатаY, ширина, высота)

Компонент добавляется в контейнер при помощи метода:

контейнер.add(компонент)

Приведем пример использования менеджера размещения компонентов с абсолютным позиционированием.

Пример.1. Демонстрация использования менеджера размещения компонентов с абсолютным позиционированием

import java.awt.*;

public class Absolute extends Frame{

Buttonb1 = newButton("Cancel"),// Создадим две кнопки

b2 = new Button("OK" );

public void Absolute()

{

setBackground(Color.lightGray); // Установимсветло-серыйфон

setLayout(null);// Установим для окна менеджер абсолютного расположения

// Установим границы (расположение и размеры) для каждой кнопки

b1.setBounds( 50, 70, 50, 24);

b2.setBounds(110, 70, 50, 24);

// Добавим обе кнопки в окно

add(b1);

add(b2);

}

}

Менеджер FlowLayout

Наиболее просто поступает менеджер размещения FlowLayout. Он укладывает в контейнер один компонент за другим слева направо как кирпичи, переходя от верхних рядов к нижним. При изменении размера контейнера "кирпичи" перестраиваются. Компоненты поступают в том порядке, в каком они заданы в методах add().

В каждом ряду компоненты могут прижиматься к левому краю, если в конструкторе аргумент align равен FlowLayout.LEFT, к правому краю, если этот аргумент FlowLayout.RIGHT, или собираться в середине ряда, если FlowLayout.CENTER.

Между компонентами можно оставить промежутки (gap) по горизонтали hgap и вертикали vgap. Это задается в конструкторе:

FlowLayout(int align, int hgap, int vgap)

Второй конструктор задает промежутки размером 5 пикселов:

FlowLayout(int align)

Третий конструктор определяет выравнивание по центру и промежутки 5 пикселов:

FlowLayout()

После формирования объекта эти параметры можно изменить методами:

setHgap(int hgap) setVgap(int vgap) setAlignment(int align)

Менеджер BorderLayout

Менеджер размещения BorderLayout делит контейнер на пять неравных областей, полностью заполняя каждую область одним компонентом. Области получили географические названия NORTH, SOUTH, WEST, EAST и CENTER.

Метод add() в случае применения BorderLayout имеет два аргумента: ссылку на компонент comp и область region, в которую помещается компонент — одну из перечисленных выше констант:

add(Component comp, String region)

Обычный метод add (Component comp) с одним аргументом помещает компонент в область CENTER.

В классе два конструктора:

· BorderLayout () — между областями нет промежутков;

· BorderLayout(int hgap int vgap) — между областями остаются горизонтальные hgap и вертикальные vgap промежутки, задаваемые в пикселах.

Если в контейнер помещается менее пяти компонентов, то некоторые области не используются и не занимают места в контейнере. Если не занята область CENTER, то компоненты прижимаются к границам контейнера.

Рис. 2. Области размещения BorderLayout

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