Назад
Вперед
3.5. Переключатели с зависимой фиксацией
В примере демонстрируются приемы работы со
стандартными переключателями, имеющими
зависимую фиксацию и сделанными на базе класса
Checkbox.
Исходный текст примера
Архив проекта для Java WorkShop 2.0
Демонстрация
(ваш браузер должен уметь работать с аплетами
Java)
Немного теории
Как мы уже говорили в описании предыдущего
примера, на базе класса Checkbox вы можете создавать
в приложениях Java стандартные переключатели с
независимой и зависимой фиксацией.
Чтобы сделать группу переключателей с
зависимой фиксацией, вы должны вначале создать
объект класса CheckboxGroup. Это легко, так как
соответствующий конструктор не имеет
параметров.
Далее переключатели создаются в виде объектов
класса Checkbox. Через первый параметр вы должны
передать конструктору заголовок переключателя,
через второй - ссылку на объект класса CheckboxGroup, а
через третий - начальное состояние переключателя
(true - включен, false - выключен).
Дальнейшая работа выполняется таким же
образом, что и с переключателями, имеющими
независимую фиксацию.
Текущее состояние переключателя определяется
с помощью метода getState. Если переключатель
включен, этот метод возвращает значение true, а
если выключен - false.
Для установки переключателя в заданное
состояние можно использовать метод setState. Этому
методу через единственный параметр передается
новое состояние - true - включен, false - выключен.
Чтобы отследить изменение состояния
переключателя в результате действий
пользователя, необходимо организовать в аплете
(или в окне автономного приложения) обработку
событий, например, переопределив метод action.
Описание примера
В окне аплета имеются три переключателя,
объединенные в группу. Они управляют цветом
текстовой строки, нарисованной в нижней части
этого окна (рис. 1).
Рис. 1. Окно аплета с группой зависимых
переключателей
Переключатель Red задает красный цвет текста,
переключатель Blue - синий, а переключатель Black -
черный.
Рассмотрим исходный текст аплета.
Поля главного класса аплета
В поле grTextColor находится ссылка на объект класса
CheckboxGroup - группу зависимых переключателей:
CheckboxGroup grTextColor;
Поля с именами chboxRedText, chboxBlueText и chboxBlackText
предусмотрены для хранения ссылок на
переключатели с зависимой фиксацией,
управляющие цветом текста:
Checkbox chboxRedText;
Checkbox chboxBlueText;
Checkbox chboxBlackText;
В поле clrText хранится текущий цвет текстовой
строки, который зависит от состояния
переключателей:
Color clrText = Color.black;
Метод init
При инициализации аплета метод init
устанавливает желтый цвет фона окна аплета:
setBackground(Color.yellow);
Затем мы создаем группу зависимых
переключателей:
grTextColor = new CheckboxGroup();
Далее метод init создает три переключателя,
передавая конструктору заголовки, ссылки на
группу и начальное состояние:
chboxBlackText =
new Checkbox("Black", grTextColor, true);
chboxBlueText =
new Checkbox("Blue", grTextColor, false);
chboxRedText =
new Checkbox("Red", grTextColor, false);
Первый из этих трех переключателей по
умолчанию будет находиться во включенном
состоянии, так как значение последнего
параметра, переданное конструктору, равно true.
Добавление переключателей в окно аплета
выполняется методом add:
add(chboxBlackText);
add(chboxBlueText);
add(chboxRedText);
Метод paint
В задачу метода paint входит отображение в нижней
части окна аплета текстовой строки. Цвет этой
строки определяется содержимым поля clrText:
public void paint(Graphics g)
{
g.setColor(clrText);
g.setFont(
new Font("Helvetica", Font.PLAIN, 24));
g.drawString("Test string", 10, 60);
}
Метод action
Метод action получает управление, когда
пользователь изменяет состояние переключателей,
расположенных в окне аплета, или выполняет
другие действия, вызывающие появление событий.
Если событие вызвано переключателем, то его
ссылка имеет тип Checkbox. В этом случае мы
сохраняем ее в переменной chboxChanged после
явного приведения типа:
public boolean action(Event evt, Object obj)
{
Checkbox chboxChanged;
if(evt.target instanceof Checkbox)
{
chboxChanged = (Checkbox)evt.target;
. . .
return true;
}
return false;
}
Таким образом, ссылка на переключатель,
состояние которого изменил пользователь,
оказывается в поле chboxChanged.
Далее мы определяем, какой именно
переключатель вызвал появление события.
В зависимости от того, состояние какого
переключателя было изменено пользователем, мы
устанавливаем в поле clrText соответствующий цвет
текстовой строки:
if(chboxChanged.equals(chboxRedText))
{
clrText = Color.red;
}
else if(chboxChanged.equals(chboxBlackText))
{
clrText = Color.black;
}
else if(chboxChanged.equals(chboxBlueText))
{
clrText = Color.blue;
}
Затем метод action перерисовывает окно аплета,
вызывая метод repaint, и сигнализирует о завершении
обработки события, возвращая значение true:
repaint();
return true;
Назад Вперед |