IT • archiv

rus / eng | Логин | Добавить отзыв | Печать | Почта | Клуб




Инструменты


Создание графического web-приложения в VisualAge for Java 3.5. Часть 7

 
(Николай Зайкин)

Подключим диалоговое окно к основному приложению. Чтобы окно выбора настроек MobileDictionarySettings могло передавать данные в основной класс MobileDictionary, нам надо:

  1. Иметь в классе MobileDictionarySettings ссылку на родительский класс (вызвавший класс) - MobileDictionary, для этого создадим в классе MobileDictionarySettings поле типа MobileDictionary: Перейдите в Workbench, установите курсор на классе MobileDictionarySettings и нажмите кнопку создания поля класса - Create Field. Заполните поля мастера (SmartGuide):
    • Field Name -> parentApp;
    • Field Type -> (через Browse) MobileDictionary;
    • Initial Value -> null;

    Мастер создания поля класса
  2. Создать конструктор с синтаксисом, который позволяет передавать ссылку на вызывающий класс.
    Нажмите кнопку создания нового метода или конструктора (тот же метод по сути): Create Method or Constructor. Выберите флажок "Create a new constructor", нажмите кнопку Next.
    Мастер создания метода или конструктора класса
    Через Add... добавьте:
    • Name -> parentApp;
    • Выберите флажок -> Reference Types;
    • Выберите тип -> MobileDictionary.

    Мастер создания метода или конструктора класса
    Нажмите кнопку Finish.
    Мастер создания метода или конструктора класса
Зайдите в созданный конструктор и добавьте следующий код в текстовом редакторе:
   super();
    this.parentApp = parentApp;
    initialize();

Метод initialize(); автоматически был сгенерирован VisualAge, в нем выполняются установки графических элементов (метки, кнопки и т.д.). В этом методе мы добавим занесение в поля текущих значений настройек:
       // user code begin {2}
        if (parentApp != null) {
                ivjJTextProxyField.setText(parentApp.proxyURL);
                ivjJTextPortField.setText(parentApp.proxyPort);
                ivjJTextHostField.setText(parentApp.hostURL);
                ivjJCheckBox1.setSelected(parentApp.useProxy);
        }
        // user code end

Теперь при открывании окна Settings в нем в текстовых полях будут находиться текущие настройки.

Далее, надо сделать так, чтобы это окно при нажатии кнопки Ok передавало настройки в основное приложение. Обратим наш взор на метод actionPerformed(ActionEvent). Это стандартный метод, который должен иметь класс, реализующий интерфейс ActionListener. Метод был автоматически сгенерирован VAJ когда мы указали, что будем реализовывать вышеуказанный интерфейс. Напомню, что кнопка JButton генерирует событие ActionEvent, и для регистрации класса как блока прослушивания этого события класс должен реализовывать интерфейс ActionListener. Чтобы получать и обрабатывать события от кнопок надо:

  1. Зарегистрировать для них блок прослушивания (один источник может иметь несколько блоков прослушивания, но в нашем случае - только один - класс MobileDictionarySettings). Зайдите в метод initialize() и добавьте следующие строки под уже добавленный нами код:
       }
        ivjJOkButton.addActionListener(this);
        ivjJCancelButton.addActionListener(this);
        // user code end
    
    
  2. Получить событие, определить источник, и выполнить действия в зависимости от источника. Перейдите в метод actionPerformed(ActionEvent) и введите следующий код:
       if (e.getSource() == ivjJOkButton) {
            parentApp.useProxy = ivjJCheckBox1.isSelected();
            parentApp.proxyURL = ivjJTextProxyField.getText();
            parentApp.proxyPort = ivjJTextPortField.getText();
            parentApp.hostURL = ivjJTextHostField.getText();
        }
        dispose();
    
    

Все, класс MobileDictionarySettings закончен. Теперь подключм его к основному классу приложения (если вы не забыли - MobileDictionary :)).

Нажмите мышкой в Workbench на класс MobileDictionary. Сейчас я покажу другой быстрый способ добавления действия на какое-либо событие. Откройте класс в визуальном редакторе (правой кнопкой на классе: Open To -> Visual Composition или через меню: Selected -> Open To -> Visual Composition). Нажмите правую кнопку мыши на пункте меню Settings ... и выберите Event to Code ...:
Подключение кода к кнопке меню

В появившемся окне заполните поля:

  • Settings______MenuItem event -> actionPerformed;
  • В окно текстового редактора добавьте следующий код:
    /**
     * Comment
     */
    public void settings____MenuItem_ActionPerformed
                    (java.awt.event.ActionEvent actionEvent) {
     MobileDictionarySettings mbs = new MobileDictionarySettings(this);
     mbs.setVisible(true);
     return;
    }
    
    

    Добавление кода к событию
Нажмите Ok.

Ваше окно VCE (Visual Composition Editor) станет похожим на это:
Визуальный редактор
Вы можете попробовать через меню вызывать окно настроек. И проверить - кнопка Ok будет передавать в приложение настройки и при следующем вызове окна Settings оно будет заполнено предыдущими настройками. При нажатии кнопки Cancel просто будет закрываться окно, все сделанные изменения будут теряться. Также будут теряться изменения при каждом новом запуске программы, так как мы не добавили код, задающий персистентность настроек. Если вы попробуете несколько раз вызывать окно настроек, то заметите, что оно всегда появляется в самой левой верхней позиции. Для удобства можно задать начальную позицию относительно родительноского фрейма. Добавьте следующую строку в метод initialize() класса MobileDictionarySettings в конец блока if (parentApp != null) (не забывайте, что мы должны писать код только между автоматически сгенерированными комментариями, в противном случае при регенерации метода этот код может быть потерян):

{
 ivjJCheckBox1.setSelected(parentApp.useProxy);
 this.setLocation(parentApp.getX() + 10,
                  parentApp.getY() + 10);
}

Теперь диалоговое окно будет появляться на 10 пикселов правее и ниже родительского окна...

TOC | Часть 8 >




Справка | Условия Copyright © 1999 — 2010, IT • archiv.
В начало | Логин | Добавить отзыв | Поиск | Почта