IT • archiv

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




Инструменты


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

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

В завершающей части статьи мы создадим и подключим к кнопке "Translate !" процедуру, которая отвечает за коммуникацию с web сервером.

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

Так как мы будем использовать сетевые классы Java, нам надо подключить пакет, отвечающий за сетевые возможности. В начале класса MobileDictionary в месте импорта пакетов пропишите строку:

   import java.net.*;

Также в начало класса скопируйте следующие константы, они пригодятся при формировании HTTP запроса:

private static final String DICT_URL = "/cgi-bin/dict.cgi?word=";
 private static final String MODE_ID  = "&type=";
 private static final String APP_ID   = "&app=java";

Перейдите в новосозданный метод и скопируйте в него следующий код, запрашивающий перевод слова, принимающий ответ от web сервера и отображающий данные в текстовую область:

try {
   int c;
   ivjJTranslationTextArea.setText(
       "Searching ... Please, wait ...\n"
           + "Host : "
           + hostURL
           + "\n"
           + ((useProxy)
               ? "With proxy : " + proxyURL + ":" + proxyPort
               : "Without proxy. Direct connection."));

   Properties sprop = System.getProperties();
   sprop.put("http.proxyHost", useProxy ? proxyURL : "");
   sprop.put("http.proxyPort", useProxy ? proxyPort : "");
   System.setProperties(sprop);

   URL hp =
       new URL(
           hostURL
               + DICT_URL
               + ivjJWordTextField.getText()
               + MODE_ID
               + typeDefault
               + APP_ID);

   HttpURLConnection hpCon =
     (HttpURLConnection) hp.openConnection();
   int len = hpCon.getContentLength();
   if (len > 0) {
       ivjJTranslationTextArea.setText
          ("Connected ... Please, wait ...");
       InputStream input = hpCon.getInputStream();
       InputStreamReader isr =
          new InputStreamReader(input, "Cp1251");

       int i = len;
       char ch;
       String tr = "";
       while (((c = isr.read()) != -1) && (--i > 0)) {
           tr += (char) c;
       }
       int eod = tr.indexOf("searching time =");
       eod = tr.indexOf("sec", eod) + 3;
       tr = tr.substring(0, eod);
       ivjJTranslationTextArea.setText(tr);
   } else {
       ivjJTranslationTextArea.setText
         ("Error ! Connection to host failed !");
   }
} catch (IOException e) {
   System.out.print(e);
}

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

Теперь подключим данный метод к кнопке "Translate !". Для подключения обработки этого события перейдем в визуальный редактор (Selected -> Open To -> Visual Composition).

Нажмите правую кнопку мыши на кнопке JWordButton, выберите Event to Code..., заполните поля:

  • JWordButton event -> actionPerformed;
  • Method -> performTranslation().
Подключение кода к событию
Нажмите кнопку Ok. Создание связей в визуальном редакторе

Также процедура запроса перевода слова может быть инициирована, если пользователь нажмет кнопку Enter в момент ввода слова в текстовое поле. Нажмите правую кнопку на бине JWordTextField, выберите Event to Code...,

  • JWordTextField event -> keyPressed;
  • остальные поля - по умолчанию.
В текстовую область скопируйте следующие строки:
int key = keyEvent.getKeyCode();
 if (key == KeyEvent.VK_ENTER) {
     performTranslation();
 }

Подключение кода к событию
Нажмите кнопку Ok. Вы должный получить что-то типа этого: Создание связей в визуальном редакторе

Все, основная работа по созданию приложения завершена! Можете тестировать!

Если внешний вид элементов интерфейса вас не устраивает и при слове Forte у вас не возникает нехороших ассоциаций, попробуйте закомментировать строку

 UIManager.setLookAndFeel
   (UIManager.getSystemLookAndFeelClassName());

в методе main().

Можно экспортировать приложение для запуска вне интегрированной среды VisualAge for Java. Для этого нажмите на пакете mdict.vaj35 правую кнопку меню и выберите Export. В окне появившегося мастера выберите формат Jar file и нажмите Next. Можно экспортировать также и отдельные файлы (Directory), но это удобно, если вы хотите перенести файлы в другую среду разработки, которая поддерживает только импорт текстовых файлов исходных кодов. Экспорт в виде репозитория удобен для переноса в VisualAge for Java на другом компьютере, так как в этом случае сохраняется информация о визуальном проектировании.

В следующем шаге выберите путь и имя jar файла, проверьте, что все нужные .class и .java файлы выбраны для экспорта.
Экспорт приложения из VisualAge for Java
Зайдите в диалог выбора ресурсов. В левом окне выберите проект Mobile Dictionary Project, в правом окне отключите все галочки кроме dukeMagnify.gif, этот гном с лупой отображается в About окне и соответственно должен быть экспортирован в .jar файл.
Выбор ресурсов для экспорта из VisualAge for Java
Нажмите кнопку Ok и затем Finish.

Для того, чтобы экспортировать какой-либо пакет (например, mdict.vaj35.*) в формате репозитория, надо сделать релиз-версию этого пакета (точно так же, как и релиз класса).

После экспорта приложения в виде .jar файла используйте следующую строку (можете занести ее в командный .bat файл)

java -cp mdict.vaj35.jar mdict.vaj35.MobileDictionary

для запуска приложения под ОС Windows.

Для запуска приложения под ОС Linux вам понадобится либо перекодировать словари в кодировку KOI8-R, либо дописать перекодировку в скрипт dict.cgi. И второе, что надо будет сделать, это в методе performTranslation() класса MobileDictionary заменить в конструкторе InputStreamReader тип кодировки также на KOI8-R (естественно, что локаль должна быть настроена :)).

Related links:

  1. VisualAge for Java на сайте компании IBM.
  2. Исходные коды к данной статье.
  3. Экспортированный репозиторий с проектом к данной статье (для пользователей VAJ).
Последняя версия статьи всегда доступна на сайте автора.

TOC | Дополнение >




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