Статьи

JavaFX и JDBC

В этом руководстве описывается, как использовать технологию JavaFX при разработке приложений. Рассматриваются общие вопросы, такие как создание CRUD- ориентированных систем и использование SQL .

Постановка задачи

Чтобы изучить возможности JavaFX, давайте рассмотрим базу данных toursDB из поставки Sun JDK v1.6 и создадим для нее графический интерфейс.

База данных toursDB содержит информацию туристического агентства о рейсах в различные пункты мира и количестве забронированных мест.

Предположим, что пользователь регистрирует рейс на конкретную дату с указанием количества мест эконом, бизнес и первого класса. Типичный сценарий действий пользователя будет следующим:

  • просмотрите список рейсов и найдите нужный рейс по номеру или месту прибытия / назначения

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

  • просмотрите информацию о зарегистрированной дате и отредактируйте количество мест или вообще удалите запись даты

У нас есть три формы. Они появляются как следующие:

Среда разработки

Для разработки приложения вам потребуется бесплатная среда IDE NetBeans с установленным плагином JavaFx .

В качестве движка базы данных в этом примере используется Apache Derby .

Для запуска приложения на вашем компьютере должна быть установлена JRE v1.6 . JDK не требуется для запуска приложений.

Создание проекта

Создайте проект NetBeans, используя стандартную процедуру, и укажите его тип в качестве приложения JavaFX:

 

Добавьте JavaFXUserLib и Derby в библиотеки проекта:

 

Библиотеки Derby поставляются вместе с JDK v1.6 и обычно находятся в

C:\Program Files\Java\jdk1.6.0\db\lib\ folder.

Для простоты в этом примере используется библиотека Derby во встроенном -mode, поэтому достаточно указать файл derby.jar в проекте. Для удобства вы можете скопировать derby.jar в каталог проекта.

Файл с тестовой базой находится в архиве

C:\Program Files\Java\jdk1.6.0\db\demo\databases\toursdb.jar

Чтобы разрешить отладку в IDE NetBeans, извлеките toursdb.jar в корневой каталог проекта.

В Свойствах проекта укажите crudfx.MainFrame в качестве основного класса. Этот класс будет содержать основную форму заявки:

Используя эту конфигурацию, вы сможете запускать приложение непосредственно из NetBeans.

Создайте класс Java с именем Starter и укажите следующую строку в методе main

net.java.javafx.FXShell.main(new String[]{"crudfx/MainFrame"});

Эта строка позволяет запускать приложение как модуль Java.

Создайте новую конфигурацию для основного класса:

При сборке проекта со второй конфигурацией будет создана папка dist с файлом jar приложения и всеми используемыми библиотеками.

Основная форма заявки

Используя стандартные средства JavaFX, создайте форму в файле crudfx.MainFrame.fx следующим образом:

Форма содержит поля поиска в левой части и таблицу результатов в середине. Для лучшего визуального восприятия отключите стандартное оформление границ окна.

Работа с базой данных

Удалите код, который работает с базой данных, в отдельный Java-класс crudfx.DataSource, свяжите таблицу формы с моделью и заполните модель, вызвав статический метод crudfx.DataSource.getFlightData (…).

Никаких дополнительных ресурсов не требуется для вызова кода Java из JavaFX.

Работа с базой данных будет выполняться через JDBC с помощью стандартных средств Java.

Расширение возможностей

Некоторые компоненты GUI в JavaFX не имеют достаточных средств для настройки. Например, в основной форме заголовки таблицы и полоса прокрутки не регулируются.

Чтобы улучшить их внешний вид, используйте класс crudfx.DataGrid в качестве таблицы. Этот класс расширяет класс JavaFX таблицы. Переопределите операцию createView:

operation DataGrid.createView():<<javax.swing.JComponent>>  {  var jComponent=super.createView();  Tools.adjustTableHeader(jComponent);  return jComponent; }

В статическом методе AdjustTableHeader (… Java-класса crudfx.Tools измените полосу прокрутки, используя стандартные средства Swing:

Заголовки таблицы будут скорректированы почти таким же образом.

Разделение кода

Хотя для инициализации компонентов в JavaFX обычно требуется всего несколько строк кода, часто удобно поместить код инициализации в отдельный файл. Например, пусть все кнопки из примера приложения отличаются только своими значками и вызываемыми действиями:

Для повторного использования кода создайте класс JavaFX crudfx.ImageButton и добавьте операцию создания кнопки в этот класс.

operation ImageButton.createButton(click:operation(),normalImage:Image,hoverImage:Image)

Добавление кнопки выглядит следующим образом:

...top: BorderPanel {  right: (new ImageButton).createButton   (    operation()     {      exitFromApp();     }    ,Image { url: "images/closeButton.png" }    ,Image { url: "images/closeButtonHover.png" }   )...

Форма выбора даты

При нажатии на строку с рейсом в главной форме откройте окно с датами полета:

Окно будет содержать список дат и кнопку для регистрации новой даты. Полосы прокрутки списка можно настраивать аналогично полосам таблицы в основной форме.

Форма бронирования авиабилетов

В форме для редактирования информации о забронированном рейсе данные будут вводиться в текстовые поля:

Кнопки будут отображаться в зависимости от того, новая это запись или редактируемая:

...left: (new ImageButton).createButton (  operation()   {    if(dateModel.row==null)     {      if(DataSource.registerDate(dateModel.key,dateModel.flight_date        ,dateModel.economy,dateModel.business,dateModel.firstclass))       { me.close(); }     }    else     {      if(DataSource.updateDate(dateModel.key,dateModel.row.flight_date        ,dateModel.flight_date,dateModel.economy,dateModel.business,dateModel.firstclass))       { me.close(); }     }   }   ,Image { url: if dateModel.row == null then "images/insertButton.png"      else "images/updateButton.png" }   ,Image { url: if dateModel.row == null then "images/insertButtonHover.png"      else "images/updateButtonHover.png" } )...

Сообщения об ошибках

При работе с данными размещайте код для отображения сообщений об ошибках непосредственно в методах класса DataSource. Например, если вы вводите дату в недопустимом формате, в стандартном диалоговом окне Swing отобразится сообщение «Не удается зарегистрировать дату» вместе с текстом исключения:

Это сообщение будет достаточно для приложения.

Создание исполняемого файла

Код JavaFX должен быть скомпилирован перед запуском, поэтому необходимо отображать заставку во время загрузки приложения. Начиная с версии 6 платформы Java, вы можете отобразить заставку, указав изображение в файле манифеста приложения с помощью параметра SplashScreen-Image.

Выберите какое-нибудь животное в качестве логотипа:

 

Но так как формы используют изображение одуванчика, лучше использовать нечто похожее в виде всплеска. Например, см. Следующий рисунок:

 

В среде IDE NetBeans выберите ранее созданную конфигурацию с именем «test» и соберите проект. Файл CRUDFx.jar и папка с используемыми библиотеками будут созданы в папке distr. Скопируйте папку toursDB с тестовой базой данных в папку distr.

Чтобы запустить приложение, щелкните файл CRUDFx.jar.

Исходный код

crudfx.zip — 5Мб

Этот файл содержит исходный код, базу данных и скомпилированное приложение.

Вывод

Несмотря на бета-состояние технологии JavaFX, возможности, используемые в этой технологии, позволяют создавать работающие настольные приложения.

В Silverlight и Flex проекты, которые часто называют в качестве конкурентов JavaFX, могут быть использованы только для отдыха или мультимедийного контента.

Сравнение архитектур JavaFX, Flex и Silverlight

Что такое JavaFX?

Java FX — это набор библиотек Java, который компилирует код JavaFX Script (ранее известный как F3) в код Java (и, в конечном итоге, байт-код).

Язык сценариев оптимизирован для описания макетов GUI. Поскольку JavaFX построен на JRE и позволяет легко вызывать классы Java, любые задачи, которые не могут быть решены непосредственно в JavaFX, могут быть обработаны кодом Java. JavaFX удобен и мощен.

Что такое Flex?

Flex — это компилятор, который берет MXML-описание GUI и компилирует его в файл .swf, который можно отобразить в браузере или запустить отдельно с помощью плагина Flash. Результирующий файл .swf похож на объекты Flash, которые часто представлены в виде рекламы на веб-страницах. При использовании Flex практически нет доступа к файловой системе.

Что такое Silverlight?

Silverlight — это плагин Microsoft, доступный для большинства основных браузеров на Windows и Mac (пока не поддерживается Unix). Вы можете получить доступ к функциям Silverlight из JavaScript и создать форму или чертеж, написав описание XAML (файл XML). В Windows вы можете получить доступ к системным компонентам из JavaScript через OLE. Поддержка прямого доступа к CLR (среда выполнения Microsoft для C #) находится в стадии разработки в Silverlight v2.

Вывод: JavaFX имеет преимущество, имея доступ к зрелой платформе Java. Все три платформы являются новыми и находятся в стадии активной разработки.