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

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

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

Кнопки с графикой и анимацией
Кнопка в виде аплета
Переключатели класса Checkbox
Переключатели с зависимой фиксацией

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

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

Назад Вперед

3.5. Переключатели с зависимой фиксацией

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

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

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

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

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

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

Чтобы сделать группу переключателей с зависимой фиксацией, вы должны вначале создать объект класса CheckboxGroup. Это легко, так как соответствующий конструктор не имеет параметров.

Далее переключатели создаются в виде объектов класса Checkbox. Через первый параметр вы должны передать конструктору заголовок переключателя, через второй - ссылку на объект класса CheckboxGroup, а через третий - начальное состояние переключателя (true - включен, false - выключен).

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

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

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

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

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

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

pic1.gif (2067 bytes)

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

Назад Вперед

[Назад]