Назад
    Вперед 
    3.1. Кнопки на базе класса Button
    В примере мы создаем простейшие кнопки на базе
    класса Button. С помощью этих кнопок пользователь
    может изменить цвет фона окна аплета.
    Демонстрируются методы блокирования и
    разблокирования кнопок класса Button. 
    Исходный текст примера 
    Архив проекта для Java WorkShop 2.0  
    Демонстрация 
    (ваш браузер должен уметь работать с аплетами
    Java) 
    Немного теории 
    На базе класса Button приложения Java могут
    создавать стандартные кнопки. Внешний вид этих
    кнопок зависит от операционной системы, в среде
    которой работает приложение. Все, что вы можете
    указать при создании такой кнопки, - это надпись
    на ее поверхности. Использование графических
    изображений или каких-либо других улучшений
    внешнего вида для стандартной кнопки невозможно.
     
    Надпись на кнопке передается конструктору
    класса Button. Есть также вариант конструктора,
    допускающий создание кнопок без надписи.  
    С помощью методов getLabel и setLabel приложение может
    получать текущую надпись и устанавливать новую,
    соответственно.  
    Обычно кнопки создаются на этапе инициализации
    приложений (в методе init), однако эта операция
    может быть выполнена и позже.  
    Новая кнопка не размещается в окне аплета или
    приложения в области с фиксированными
    координатами (как это делается в стандартных
    приложениях Windows). Вместо этого кнопка, подобно
    другим компонентам, добавляется в окно аплета
    или приложения методом add.  
    Стратегия размещения компонент, добавленных в
    окно приложения подобным образом, определяется
    при помощи системы Layout Manager. В этом примере
    применяется режим FlowLayout, установленный по
    умолчанию.  
    Чтобы обрабатывать события, связанные с
    кнопками, приложение должно переопределить
    метод handleEvent или, что проще, метод action. В качестве
    первого параметра методу action передается ссылка
    на объект, вызвавший возникновение события.
    Пользуясь этой ссылкой, легко определить, какая
    из кнопок была нажата.  
    Описание примера 
    В нашем аплете мы создаем четыре кнопки с
    надписью Yellow, White, Disable и Enable (рис. 1). 
      
    Рис. 1. Окно аплета SimpleButton  
    С помощью кнопок Yellow и White можно изменять цвет
    фона окна аплета. Кнопки Disable и Enable позволяют
    выполнять, соответственно, блокировку и
    разблокировку кнопок управления цветом. 
    На рис. 2 показано окно аплета с
    заблокированными кнопками. 
      
    Рис. 2. Окно аплета с заблокированными кнопками 
    Для каждой кнопки мы определили
    соответствующее поле в главном классе:  
    Button btnYellowBackground;
Button btnWhiteBackground;
Button btnDisable;
Button btnEnable; 
    Метод init
    На этапе инициализации аплета метод init создает
    кнопки, передавая конструктору класса Button строки
    названий:  
    btnYellowBackground = new Button("Yellow");
btnWhiteBackground = new Button("White");
btnDisable = new Button("Disable");
btnEnable = new Button("Enable");
    Созданные кнопки добавляются в окно аплета
    методом add:  
    add(btnYellowBackground);
add(btnWhiteBackground);
add(btnDisable);
add(btnEnable); 
    При этом они располагаются в окне по мере
    добавления в соответствии с режимом FlowLayout
    системы Layout Manager, установленном по умолчанию.  
    Две из кнопок (с надписями Disable и Enable)
    предназначены, соответственно, для блокирования
    и разблокирования кнопок Yellow и White. Сразу после
    инициализации кнопки Yellow и White находятся в
    разблокированном состоянии, поэтому метод init
    блокирует кнопку Enable:  
    btnEnable.disable(); 
    Блокировка выполняется с применением метода
    disable (а разблокировка - методом enable).  
    Метод action
    Для обработки событий, связанных с нажатиями
    кнопок, мы переопределили метод action:  
    public boolean action(Event evt, Object obj)
{
  if(evt.target instanceof Button)
  {
    . . .
    repaint();
    return true;
  }
  else
  {
    return false;
  }
}
    Наша реализация этого метода проверяет поле
    target объекта evt, вызвавшего событие. Если событие
    вызвано кнопкой, в этом поле находится объект
    класса Button. Оператор instanceof позволяет нам
    выделить нужные события и обработать в
    соответствии с логикой работы приложения.  
    Обработка заключается в определении нажатой
    кнопки. В зависимости от того, какая кнопка была
    нажата, метод action либо перекрашивает цвет фона
    окна аплета, либо выполняет блокировку и
    разблокировку кнопок.  
    Вот так обрабатываются события от кнопок
    изменения цвета фона:  
    if(evt.target.equals(btnYellowBackground))
{
  setBackground(Color.yellow);
}
      
else if(
  evt.target.equals(btnWhiteBackground))
{
  setBackground(Color.white);
}
    Здесь мы просто устанавливаем новый цвет фона
    методом setBackground.  
    Когда пользователь нажимает на кнопку Disable,
    метод action блокирует все кнопки, кроме кнопки с
    надписью Enable, выполняющей разблокировку:  
    else if(evt.target.equals(btnDisable))
{
  btnWhiteBackground.disable();
  btnYellowBackground.disable();
        
  btnDisable.disable();
  btnEnable.enable();
}
    Если же нажата кнопка разблокировки, метод action
    разблокирует все кнопки, кроме кнопки Enable:  
    else if(evt.target.equals(btnEnable))
{
  btnWhiteBackground.enable();
  btnYellowBackground.enable();
        
  btnEnable.disable();
  btnDisable.enable();
}
    В любом случае после обработки событий,
    вызванных кнопками, метод перерисовывает окно
    аплета методом repaint и возвращает значение true:  
    repaint();
return true; 
    В противном случае возвращается значение false.  
     
    Назад Вперед  |