В этом руководстве описывается, как использовать технологию 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. Все три платформы являются новыми и находятся в стадии активной разработки.