Создание графического web-приложения в VisualAge for Java 3.5. Часть 8
(Николай Зайкин)
Теперь добавим в класс MobileDictionary код, который будет сохранять
настройки приложения между его запусками. Нам надо создать два метода, один для
сохранения настроек на жесткий диск при закрытии приложения, и второй метод для загрузки
настроек при запуске приложения.
Нажмите кнопку и введите
название метода 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оздадим метод, загружающий предыдущие настройки с жесткого диска во время запуска
приложения.
Нажмите кнопку и введите
название метода 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

|