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

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

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

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

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

Назад Вперед

3.7. Списки класса Choice

В примере мы показали использование списка класса Choice для перехда на странице Web к просмотру различных документов HTML.

Исходный текст примера

Архив проекта для Java WorkShop 2.0

Демонстрация
(ваш браузер должен уметь работать с аплетами Java)

Немного теории

Приложения Java могут легко создать раскрывающиеся, или как еще говорят, "выпадающие" списки на базе класса Choice.

Конструктор этого класса не имеет параметров. Создав объект-список, вы можете его наполнить при помощи метода addItem.

Когда пользователь работает со списком, контейнер, где этот список расположен, получает извещения о возникновении событий. Чтобы их обработать, приложению достаточно определить метод action.

Внутри этого метода или в любом другом месте вы можете выполнять над списком ряд операций. Например, при помощи методов getSelectedItem и getSelectedIndex нетрудно определить, соответственно, название и номер строки, выделенной в списке пользователем. Метод countItems позволяет узнать количество строк, имеющихся в списке, а метод getItem предназначен для извлечения произвольной строки по ее номеру. Приложение может также выделить элемент списка по номеру или по содержащейся в ней строке при помощи одной из двух реализаций метода select.

Описание примера

В окне нашего аплета, показанном на рис. 1, имеется список адресов URL и кнопка с надписью Go. Вы можете выбрать нужный вам адрес, сделав щелчок мышью по небольшой кнопке с изображением треугольника, расположенной в правой части списка.

pic1.gif (1524 bytes)

Рис. 1. Список класса Choice в окне аплета

Если нажать на кнопку Go, в окно браузера будет загружен документ HTML с адресом URL, выбранном из списка.

Поля главного класса

В главном классе нашего приложения мы определили три поля:

Choice chURLs;
Button btnGo;
String szURLtoGo;

Поле chURLs хранит ссылку на список, поле btnGo - ссылку на кнопку, а в поле szURLtoGo записывается текущий адрес URL, выбранный пользователем в процессе работы со списком.

Метод init

При инициализации аплета метод init создает список класса Choice и кнопку класса Button:

chURLs = new Choice();
btnGo = new Button("Go!");

Список и кнопка добавляются затем в окно аплета при помощи метода add:

add(chURLs);
add(btnGo);

Наполнение списка выполняется методом addItem, определенным в классе Choice:

chURLs.addItem("http://www.sun.com");
chURLs.addItem("http://www.sun.ru");
chURLs.addItem(
  "http://www.altavista.com");
chURLs.addItem(
  "http://www.glasnet.ru/~frolov");

Здесь мы добавили четыре строки, содержащие адреса URL различных серверов Web.

Последнее действие, выполняемое методом init, это установка желтого цвета фона для окна аплета:

setBackground(Color.yellow);

Метод action

Когда пользователь перебирает строки списка или нажимает кнопку Go, управление передается методу action. Этот метод определяет, какой объект вызвал появление события (список или кнопка), а затем выполняет его обработку.

Если событие связано со списком, поле evt.target является ссылкой на объект класса Choice. В этом случае мы получаем ссылку на этот объкт и записываем ее в переменную ch, как это показано ниже:

Choice ch;
int nSelectedIndex;
    
if(evt.target instanceof Choice)
{
  ch = (Choice)evt.target;
   . . .
}

Затем проверяется, от какой именно список вызвал появление события. Мы выполняем такую проверку только для демонстрации, так как наш аплет создает всего лишь один список:

if(ch.equals(chURLs))
{
  nSelectedIndex = ch.getSelectedIndex();
  szURLtoGo = ch.getSelectedItem();
  return true;
}

Далее метод action извлекает номер выделенной строки, а также саму эту строку, сохраняя полученные значения, соответственно, в полях nSelectedIndex и szURLtoGo. Фактически нам здесь нужна только строка szURLtoGo, так как именно она будет содержать адрес URL загружаемого документа HTML.

В том случае если метод action был вызван как результат нажатия на кнопку, мы вызываем метод goURL, определенный в главном классе нашего аплета:

else if(evt.target instanceof Button)
{
  if(evt.target.equals(btnGo))
  {
    goURL(szURLtoGo);
    return true;
  }
} 

Этот метод загрузит нужный документ HTML в окно браузера. Адрес URL документа передается методу goURL как ссылка на поле szURLtoGo. Напомним, что в это поле записывается текущая строка, выделенная пользователем в списке.

Метод goURL

Исходный текст метода goURL представлен ниже:

public void goURL(String szURL)
{
  if(szURL != null)
  {
    URL url = null;
    AppletContext appletContext;
    appletContext = getAppletContext();

    try
    {
      url = new URL(szURL);
    }
    catch (MalformedURLException e) { }

    if (url != null)
    {
      appletContext.showDocument(
        url, "_self");
    }
  }
}

Прежде всего, метод проверяет строку адреса, переданную ему через параметр, на равенство значению null. Если строка пустая, метод не предпринимает никаких действий.

В противном случае метод goURL получает контекст выполнения аплета (то есть контекст браузера), пользуясь для этого методом getAppletContext. Он используется впоследствии для вызова метода showDocument, загружающего в окно браузера новый документ HTML.

Адрес загружаемого документа формируется как объект класса URL с обработкой возможных исключений класса MalformedURLException.


Назад Вперед

[Назад]