|
nfo возвращает информацию об аплете ChoiceList.
Метод init
В методе init мы создаем два списка как объекты класса Choice:
chBackgroundColor = new Choice();
chForegroundColor = new Choice();
Созданные списки пока пустые, но мы можем добавить их в окно аплета, вызвав
метод add:
add(chBackgroundColor);
add(chForegroundColor);
Сразу после добавления списков мы их заполняем, вызывая для соответствующих
объектов метод addItem:
chBackgroundColor.addItem("Yellow");
chBackgroundColor.addItem("Green");
chBackgroundColor.addItem("White");
chForegroundColor.addItem("Black");
chForegroundColor.addItem("Red");
chForegroundColor.addItem("Blue");
Элементы, добавленные в список первыми, будут выбраны в списке по умолчанию.
В нашем случае будет выбран фон желтого цвета и изображение черного цвета.
Такие же цвета мы устанавливаем для окна аплета, вызывая методы
setBackground и setForeground:
setBackground(Color.yellow);
setForeground(Color.black);
Метод action
Метод action обрабатывает событие, вызванное списками, - выбор элемента из
списка.
Прежде всего, метод action сохраняет ссылку на список, в котором произошел
выбор, в переменной ch:
Choice ch;
ch = (Choice)evt.target;
Далее выполняется проверка факта, что событие вызванно именно списком, после
чего происходит анализ, в каком именно списке сделан выбор нового элемента:
if(evt.target.equals(chBackgroundColor))
{
if(ch.getSelectedIndex() == 0)
setBackground(Color.yellow);
else if(ch.getSelectedIndex() == 1)
setBackground(Color.green);
else if(ch.getSelectedIndex() == 2)
setBackground(Color.white);
}
else if(evt.target.equals(chForegroundColor))
{
if(ch.getSelectedIndex() == 0)
setForeground(Color.black);
else if(ch.getSelectedIndex() == 1)
setForeground(Color.red);
else if(ch.getSelectedIndex() == 2)
setForeground(Color.blue);
}
else
return false;
Обратите внимание, что мы вначале выполняем преобразование типа evt.target к
классу Choice, а только затем проверяем, действительно ли событие вызвано
списком. Правильно ли это?
Вообще говоря, неправильно. Так как в поле evt.target могут находиться
ссылки на объекты различных классов, в процессе выполнения преобразования типов
может произойти исключение. Если предпринимается попытка выполнить
преобразование для несовместимых типов. Но так как в нашем аплете события
создаются только списками, исключение не возникает.
Корректнее было бы вначале проверить ссылку evt.target на принаддлежность к
классу Choi
|
|