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

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

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

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

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

Назад Вперед

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).

pic1.gif (1683 bytes)

Рис. 1. Окно аплета SimpleButton

С помощью кнопок Yellow и White можно изменять цвет фона окна аплета. Кнопки Disable и Enable позволяют выполнять, соответственно, блокировку и разблокировку кнопок управления цветом.

На рис. 2 показано окно аплета с заблокированными кнопками.

pic2.gif (1719 bytes)

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


Назад Вперед

[Назад]