IT • archiv

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




Инструменты


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

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

Теперь добавим в класс MobileDictionary код, который будет сохранять настройки приложения между его запусками. Нам надо создать два метода, один для сохранения настроек на жесткий диск при закрытии приложения, и второй метод для загрузки настроек при запуске приложения.

Нажмите кнопку Create Method or Constructor и введите название метода saveSettings():
Мастер создания метода или конструктора класса
Нажмите кнопку Finish. Перейдите в новосозданный метод и скопируйте в него следующий код, обеспечивающий сохранение настроек на жесткий диск:

   prop.put("useProxy", "" + useProxy);
    prop.put("proxyURL", proxyURL);
    prop.put("proxyPort", proxyPort);
    prop.put("wordDefault", ivjJWordTextField.getText());
    prop.put("typeDefault", typeDefault);
    prop.put("hostURL", hostURL); // http address of host for dictionary
    // without ending slash, i.e. http://web-develop.virtualave.net

    try {
        fos = new FileOutputStream("MobileDictionary.dat");
    } catch (FileNotFoundException fnfe) {
        // ingnore exception
    }

    try {
        prop.store(fos, "MobileDictionary Settings");
        fos.close();
    } catch (IOException ioe) {
        System.out.println("Error writing properties file!");
        System.out.println(ioe);
    }


Редактирование метода в текстовом редакторе
И добавим этот метод для вызова перед закрытием приложения. Приложение может быть закрыто двумя способами: через File -> Exit или через кнопку закрытия в заголовке окна. Итак, перейдем в метод connEtoM1(), который вызывается при нажатии меню File -> Exit и добавим следующую строку между автоматически сгенерированными комментариями:
      // user code begin {1}
        saveSettings();
       // user code end


Редактирование метода в текстовом редакторе
То же самое проделаем с методом main() в месте добавления анонимного класса как блока прослушивания для события WindowEvent:
       public void windowClosed(java.awt.event.WindowEvent e) {
         ((MobileDictionary) e.getWindow()).saveSettings();
        System.exit(0);


Редактирование метода в текстовом редакторе
Этот метод не имеет значка Метод, который будет регенерирован возле названия, это значит он не будет регенерирован визуальным редактором и мы можем добавлять код в любое место этого метода...

Cоздадим метод, загружающий предыдущие настройки с жесткого диска во время запуска приложения.

Нажмите кнопку Create Method or Constructor и введите название метода loadSettings():
Мастер создания метода или конструктора класса
Нажмите кнопку Finish. Перейдите в новосозданный метод loadSettings() и скопируйте в него следующий код, обеспечивающий загрузку настроек с жесткого диска:

   // set default values

    prop = new Properties();

    // try to load values from disc
    try {
        fis = new FileInputStream("MobileDictionary.dat");
    } catch (FileNotFoundException e) {
        // ignore exception
    }

    try {
        if (fis != null) {
            prop.load(fis);
            fis.close();
            useProxy = prop.getProperty("useProxy").equals("true");
            proxyURL = prop.getProperty("proxyURL");
            proxyPort = prop.getProperty("proxyPort");
            wordDefault = prop.getProperty("wordDefault");
            typeDefault = prop.getProperty("typeDefault", typeDefault);
            hostURL = prop.getProperty("hostURL", hostURL);
        }
    } catch (IOException e) {
        System.out.println("Error reading properties file!");
        System.out.println(e);
    }

Редактирование метода в текстовом редакторе
Подключим этот метод для вызова при старте приложения. Подходящее место для загрузки настроек - в методе initialize(). Этот метод удобен тем, что в нем создаются элементы графического интерфейса (текстовое поле, флажки "radio button") и мы сможем установить их в предыдущее состояние загруженными настройками. Итак, перейдите в метод initialize() класса MobileDictionary и между автоматически сгенерированными комментариями добавьте следующие строки:
    // user code begin {1}
     loadSettings();
     // user code end

и после загрузки данных устанавливаем начальные значения:
// user code begin {2}
 ivjJWordTextField.setText(wordDefault);
 if (typeDefault.equals("1")) { ivjJOptionsRadioButton1.setSelected(true); }
 if (typeDefault.equals("2")) { ivjJOptionsRadioButton2.setSelected(true); }
 if (typeDefault.equals("3")) { ivjJOptionsRadioButton3.setSelected(true); }
 // user code end

Редактирование метода в текстовом редакторе
другим неплохим местом инициализации компонентов были бы их конструкторы (они же по совместительству - "методы доступа" getJOptionsRadioButton1(), getJOptionsRadioButton2(), getJOptionsRadioButton3(), getJWordTextField()). Это более идеологически правильно, так как в случае удаления этого компонента в визуальном редакторе вы не получите ошибки обращения к необъявленной переменной. В приведенном выше случае я руководствовался исключительно ленью :)), и перенес код в одно место - метод инициализации класса MobileDictionary.

Теперь настройки будут сохраняться на жестком диске между запусками приложения.

Последнее, что надо сделать для полноценной работы настроек - изменение переменной defaultType при нажатии на один из трех JRadioButton. При щелчке мышки на флажке он генерирует событие ItemEvent. Если бы мы указали при создании класса MobileDictionary, что он должен реализовывать интерфейс ItemListener, то VisualAge for Java автоматически сгенерировала бы и подключила блок прослушивания с методом itemStateChanged()...

Подключаем пакет java.awt.event.* в начале класса MobileDictionary.

Создаем метод clickRadioButton(ItemEvent event), копируем туда следующий текст:

       JRadioButton source = (JRadioButton) event.getSource();
        typeDefault = source.getActionCommand();

Редактирование метода в текстовом редакторе

Откройте класс MobileDictionaryв визуальном редакторе, нажмите правую кнопку на объекте JOptionsRadioButton1, выберите Event to Code.... Укажите:

  • JOptionsRadioButton event -> itemStateChanged;
  • Method -> clickRadioButton(ItemEvent).
Подключение кода к событию
Нажмите Ok.

Повторите то же самое с JOptionsRadioButton2 и JOptionsRadioButton3. Вы получите что-то типа этого в визуальном редакторе:
Визуальный редактор

Попробуйте несколько раз запустить приложение, изменяя настройки или положение флажка (radio button). При новом запуске они будут теми же, что и перед закрытием.

Если желаете, можно сделать релиз-версию кода (рекомендуется делать минимум раз в неделю).

Итак, с сохранением настроек закончено. Осталось подключить к кнопке "Translate !" процедуру, отправляющую на web сервер запрос (http request) и принимающую ответ (http response). Этим мы займемся в заключительной части статьи...

TOC | Часть 9 >




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