Назад
    Вперед 
    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; 
     
    Назад Вперед  |