Электронная библиотека книг Александра Фролова и Григория Фролова.
Shop2You.ru Создайте свой интернет-магазин
Библиотека
Братьев
Фроловых
[Назад]

Библиотека примеров приложений Java

Оглавление
Кнопки Button

Кнопки с графикой и анимацией
Кнопка в виде аплета
Переключатели класса Checkbox
Переключатели с зависимой фиксацией
Нестандартные переключатели
Списки класса Choice
Списки класса List
Поля класса Label
Поля класса TextField
Поля класса TextArea
Нестандартные текстовые поля
Кнопки и события в JDK 1.1

Линейки Scrollbar
Окно ScrollPane

Назад Вперед

3.4. Переключатели на базе класса Checkbox

В примере демонстрируются приемы работы со стандартными переключателями, имеющими независимую фиксацию и сделанными на базе класса Checkbox.

Исходный текст примера

Архив проекта для Java WorkShop 2.0

Демонстрация
(ваш браузер должен уметь работать с аплетами Java)

Немного теории

На базе класса Checkbox вы можете создавать в приложениях Java стандартные переключатели с независимой и зависимой фиксацией.

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

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

Текущее состояние переключателя можно определить с помощью метода getState. Если переключатель включен, этот метод возвращает значение true, а если выключен - false.

Для установки переключателя в заданное состояние можно использовать метод setState. Этому методу через единственный параметр передается новое состояние: true - включен, false - выключен.

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

Описание примера

В окне аплета имеются три переключателя, управляющие цветом и шрифтовым оформлением текстовой строки, нарисованной в нижней части этого окна (рис. 1).

pic1.gif (2131 bytes)

Рис. 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;

Назад Вперед

[Назад]