Назад
Вперед
3.4. Переключатели на базе класса Checkbox
В примере демонстрируются приемы работы со
стандартными переключателями, имеющими
независимую фиксацию и сделанными на базе класса
Checkbox.
Исходный текст примера
Архив проекта для Java WorkShop 2.0
Демонстрация
(ваш браузер должен уметь работать с аплетами
Java)
Немного теории
На базе класса Checkbox вы можете создавать в
приложениях Java стандартные переключатели с
независимой и зависимой фиксацией.
Переключатели с независимой фиксацией имеют
квадратную форму и снабжаются заголовком. Если
переключатель находится во включенном
состоянии, внутри него отображается галочка,
если в выключенном - галочка исчезает.
Для создания переключателя с независимой
фиксацией класса Checkbox вы должны использовать
конструктор без параметров или с единственным
параметром типа String, определяющим заголовок
переключателя.
Текущее состояние переключателя можно
определить с помощью метода getState. Если
переключатель включен, этот метод возвращает
значение true, а если выключен - false.
Для установки переключателя в заданное
состояние можно использовать метод setState. Этому
методу через единственный параметр передается
новое состояние: true - включен, false - выключен.
Чтобы отследить изменение состояния
переключателя в результате действий
пользователя, необходимо организовать в аплете
(или в окне автономного приложения) обработку
событий. Проще всего это сделать, переопределив
метод action.
Описание примера
В окне аплета имеются три переключателя,
управляющие цветом и шрифтовым оформлением
текстовой строки, нарисованной в нижней части
этого окна (рис. 1).
Рис. 1. Окно аплета с переключателями
Переключатель Red позволяет изменить цвет
строки с черного на красный.
С помощью переключателей Bold и Italic вы можете,
соответственно, выделить строку наклоном или
жирным шрифтом.
Рассмотрим исходный текст аплета. В нем
определено несколько полей и методов.
Поля главного класса аплета
Три поля с именами chboxRedText, chboxBoldText и chboxItalicText
предусмотрены для хранения ссылок на
переключатели:
Checkbox chboxRedText;
Checkbox chboxBoldText;
Checkbox chboxItalicText;
В поле clrText хранится текущий цвет текстовой
строки, который зависит от состояния
переключателя Red:
Color clrText = Color.black;
Поле nFontStyle используется для хранения стиля
шрифтового оформления строки. Ее исходное
состояние - отсутствие такого оформления:
int nFontStyle = Font.PLAIN;
Метод init
При инициализации аплета метод init
устанавливает желтый цвет фона окна аплета:
setBackground(Color.yellow);
Затем он создает три переключателя, передавая
конструктору соответствующие заголовки:
chboxRedText = new Checkbox("Red");
chboxBoldText = new Checkbox("Bold");
chboxItalicText = new Checkbox("Italic");
Добавление переключателей в окно аплета
выполняется методом add:
add(chboxRedText);
add(chboxBoldText);
add(chboxItalicText);
Заметим, что цвет фона окон добавленных
переключателей при этом устанавливается таким
же, как и цвет фона родительского окна аплета, то
есть желтый.
Метод paint
В задачу метода paint входит отображение в нижней
части окна аплета текстовой строки. Цвет этой
строки определяется содержимым поля clrText, а стиль
шрифтового оформления - полем nFontStyle:
public void paint(Graphics g)
{
g.setColor(clrText);
g.setFont(
new Font("Helvetica", nFontStyle, 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.
Далее мы определяем, какой именно
переключатель вызвал появление события.
Если изменилось состояние переключателя Red, мы
определяем новое состояние методом getState:
if(chboxChanged.equals(chboxRedText))
{
if(chboxChanged.getState())
clrText = Color.red;
else
clrText = Color.black;
}
В том случае когда пользователь включил
переключатель, метод getState возвращает значение true
и мы устанавливаем красный цвет текста. При
выключении переключателя мы устанавливаем
черный цвет.
Аналогично выполняется обработка
переключателей Bold и Italic:
else if(
chboxChanged.equals(chboxItalicText))
{
if(chboxItalicText.getState())
nFontStyle |= Font.ITALIC;
else
nFontStyle &= ~Font.ITALIC;
}
else if(
chboxChanged.equals(chboxBoldText))
{
if(chboxBoldText.getState())
nFontStyle |= Font.BOLD;
else
nFontStyle &= ~Font.BOLD;
}
Здесь мы устанавливаем или сбрасываем биты
Font.ITALIC и Font.BOLD при включении или выключении
соответствующего переключателя.
Затем метод action перерисовывает окно аплета,
вызывая метод repaint, и сигнализирует о завершении
обработки события, возвращая значение true:
repaint();
return true;
Назад Вперед |