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