Литмир - Электронная Библиотека

Наследники класса Component

Теперь, когда рассмотрены основные принципы работы классов Component и Container, рассмотрим их наследников, с помощью которых и строится функциональный пользовательский интерфейс.

Начнем с наследников класса Component.

Класс Canvas

Класс Canvas является простейшим наследником Component. Он не добавляет никакой новой функциональности, но именно его нужно использовать в качестве суперкласса для создания пользовательского компонента с некоторым нестандартным внешним видом.

Ниже приведен пример определения компонента, который отображает график функции sin(x):

public class SinCanvas extends Canvas {

public void paint(Graphics g) {

int height = getHeight(), width = getWidth();

// Вычисляем масштаб таким образом,

// чтобы на компоненте всегда умещалось

// 5 периодов

double k=2*Math.PI*5/width;

int sy = calcY(0, width, height, k);

for (int i=1; i<width; i++) {

int nsy = calcY(i, width, height, k);

g.drawLine(i-1, sy, i, nsy);

sy=nsy;

}

}

// метод, вычисляющий значение функции

// для отображения на экране

private int calcY(int x, int width,

int height, double k) {

double dx = (x-width/2.)*k;

return (int)(height/2.*(1-Math.sin(dx)));

}

}

Как видно из примера, достаточно лишь переопределить метод paint. Вот как выглядит такой компонент:

Программирование на Java - img_19

Класс Label

Как понятно из названия, этот компонент отображает надпись. Соответственно, и его основной конструктор принимает один аргумент типа String – текст надписи. С помощью стандартных свойств класса Component – шрифт, цвет, фоновый цвет – можно менять вид надписи. Текст можно сменить и после создания Label с помощью метода setText.

Обратите внимание, что при этом компонент сам обновляет свой вид на экране. Такой особенностью обладают все стандартные компоненты AWT.

Класс Button

Этот компонент позволяет добавить в интерфейс стандартные кнопки. Основной конструктор принимает в качестве аргумента String – надпись на кнопке. Как обрабатывать нажатие на кнопку и другие пользовательские события, рассматривается ниже.

Классы Checkbox и CheckboxGroup

Компонент Checkbox имеет два способа применения.

Когда он используется сам по себе, он представляет checkbox – элемент, который может быть выделен или нет (например, нужна доставка для оформляемой покупки или нет). В этом случае в конструктор передается лишь текст – подпись к checkbox.

Рассмотрим пример, в котором в теле контейнера добавляется два checkbox:

Checkbox payment = new Checkbox("Оплата в кредит");

payment.setBounds(10, 10, 120, 20);

add(payment);

Checkbox delivery = new Checkbox("Доставка");

delivery.setBounds(10, 30, 120, 20);

add(delivery);

Ниже приведен внешний вид такого контейнера:

Программирование на Java - img_20

Обратите внимание, что размер Checkbox должен быть достаточным для размещения не только поля для "галочки", но и для подписи.

Второй способ применения компонент Checkbox предназначен для организации "переключателей" ( radio buttons ). В этом случае несколько экземпляров объединяются в группу, причем лишь один из переключателей может быть выбран. В роли такой группы выступает класс CheckboxGroup. Он не является визуальным, то есть никак не отображается на экране. Его задача – логически объединить несколько Checkbox. Группу, к которой принадлежит переключатель, можно указывать в конструкторе:

CheckboxGroup delivery = new CheckboxGroup();

Checkbox fast = new Checkbox(

"Срочная (1 день)", delivery, true);

fast.setBounds(10, 10, 150, 20);

add(fast);

Checkbox normal = new Checkbox(

"Обычная (1 неделя)", delivery, false);

normal.setBounds(10, 30, 150, 20);

add(normal);

Checkbox postal = new Checkbox(

"По почте (до 1 месяца)", delivery, false);

postal.setBounds(10, 50, 150, 20);

add(postal);

Ниже приведен внешний вид такого контейнера:

Программирование на Java - img_21

В примере при вызове конструктора класса Checkbox помимо текста подписи и группы, указывается состояние переключателя (булевский параметр). Обратите внимание на изменение внешнего вида компонента (форма поля сменилась с квадратной на круглую, как и принято в традиционных GUI ).

Классы Choice и List

Компонент Choice служит для выбора пользователем одного из нескольких возможных вариантов (выпадающий список). Рассмотрим пример:

Choice color = new Choice();

color.add("Белый");

color.add("Зеленый");

color.add("Синий");

color.add("Черный");

add(color);

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

Программирование на Java - img_22

Обратите внимание, что для компонента Choice всегда есть выбранный элемент.

Компонент List, подобно Choice, предоставляет пользователю возможность выбирать варианты из списка предложенных. Отличие заключается в том, что List отображает сразу несколько вариантов. Количество задается в конструкторе:

List accessories = new List(3);

accessories.add("Чехол");

accessories.add("Наушники");

accessories.add("Аккумулятор");

accessories.add("Блок питания");

add(accessories);

Вот как выглядит такой компонент (верхняя часть рисунка):

Программирование на Java - img_23

В списке находится 4 варианта. Однако в конструктор был передан параметр 3, поэтому только 3 из них видны на экране. С помощью полосы прокрутки можно выбрать остальные варианты.

Рисунок иллюстрирует еще одно свойство List – возможность выбрать сразу несколько из предложенных вариантов. Для этого надо либо в конструкторе вторым параметром передать булевское значение true ( false соответствует выбору только одного элемента), либо воспользоваться методом setMultipleMode.

Классы TextComponent, TextField, TextArea

Класс TextComponent является наследником Component и базовым классом для компонент, работающих с текстом,– TextField и TextArea.

TextField позволяет вводить и редактировать одну строку текста. Различные методы позволяют управлять содержимым этого поля ввода:

TextField tf = new TextField();

tf.setText("Enter your name");

tf.selectAll();

add(tf);

Вот как будет выглядеть этот компонент:

Программирование на Java - img_24

В коде вторая строка устанавливает значение текста в поле ввода (метод getText позволяет получить текущее значение). Затем весь текст выделяется (есть методы, позволяющие выделить часть текста).

Для любой текстовой компоненты можно задать особый режим. В базовом классе Component определено свойство enabled, которое, если выставлено в false, блокирует все пользовательские события. Для текстовой компоненты вводится новое свойство – editable (можно редактировать), методы для работы с ним – isEditable и setEditable. Если текст нельзя редактировать, но компонент доступен, то пользователь может выделить часть, или весь текст, и, например, скопировать его в буфер.

72
{"b":"942266","o":1}