Статья добавлена 22 октября 2014, в среду, в 02:53. С того момента...
4882 |
просмотра |
0 | добавлений в избранное |
0 | комментариев |
Представлена в разделах:
Краткий обзор платформы JavaFX
В настоящее время технология JavaFX обеспечивает создание мощного графического интерфейса пользователя (Graphical User Interface (GUI)), 2D и 3D графику, обеспечивает создание компонентов высококачественной графики и анимации для различных приложений
История развития графических библиотек платформы Java
Самой первой графической библиотекой платформы Java была библиотека AWT набора JDK 1.0. Далее библиотека AWT была дополнена библиотекой Java 2D двухмерной графики и изображений.
Библиотека AWT обеспечивает для разработчика приложений возможность использования таких основных компонентов GUI-интерфейса как кнопка, флажок, список выбора, прокручивающийся список, метка, диалоговое окно, окно выбора файла, меню, панель с прокруткой, текстовая область и текстовое поле, использования функции Drag-and-Drop, возможность обработки событий UI-компонентов, компоновки компонентов в рабочей области, работы с цветом, шрифтом, графикой, рисования и печати.
Библиотека AWT считается тяжеловесной, так как она содержит нативную библиотеку java.awt.peer, через которую взаимодействует с операционной системой компьютера таким образом, что AWT-компоненты имеют своих двойников, реализованных для конкретной операционной системы, с которыми они связаны интерфейсами пакета java.awt.peer. Поэтому отображение AWT GUI-интерфейса зависит от операционной системы, в которой приложение развернуто.
Для расширения набора GUI-компонентов библиотеки AWT, устранения ее тяжеловесности и возможности выбора внешнего вида и поведения (Look and Feel) GUI-компонентов была создана графическая библиотека Swing.
Библиотека Swing основывается на библиотеке AWT и напрямую не связана, как библиотка AWT, с операционной системой, в которой она работает. Поэтому библиотека Swing является уже легковесной.
Кроме того, библиотека Swing дополняет библиотеку AWT такими компонентами GUI-интерфейса как панель выбора цвета, индикатор состояния, переключатель radio button, слайдер и спиннер, панель с закладками, таблицы и деревья, расширенными возможностями компоновки GUI-компонентов, таймером, возможностью отображения HTML-контента.
С помощью библиотеки Swing стало возможным создать набор отображений Look and Feel, которые разработчик может выбирать, не оглядываясь на операционную систему, и изменять внешний вид GUI-интерфейса.
Также библиотека Swing реализует архитектуру MVC (Model-View-Controller) и потоковую модель Event Dispatch Thread (EDT).
Библиотека SWT (Standard Widget Toolkit) является альтернативой библиотекам AWT/Swing, однако она не включена в официальный релиз JRE/JDK.
Библиотека SWT была создана в процессе работы над проектом Eclipse и является попыткой взять лучшее из архитектур библиотек AWT и Swing и предоставить возможность создания быстрых GUI-интерфейсов с отображением Look and Feel, как можно более полно соответствующим операционной системе, в которой они работают.
Архитектура системы SWT построена таким образом, что SWT-компоненты представляют собой лишь Java-оболочки GUI-компонентов конкретной операционной системы. Для операционной системы, в которой отсутствует реализация какого-либо компонента, система SWT обеспечивает Java-эмуляцию. Так в системе SWT достигается скорость работы и полное соответствие внешнему виду и поведению операционной системе.
Для создания GUI-интерфейса система SWT предоставляет такие GUI-компоненты как кнопка, включая флажок и переключатель, список, метка, меню, текстовая область, диалоговое окно, индикатор прогресса, панель с прокруткой, слайдер и спиннер, таблица и дерево, панель с вкладками, панель выбора даты, панель инструментов, встроенный Web-браузер, гиперссылка, а также обеспечивает компоновку SWT-компонентов, встраивание AWT-компонентов, отображение OpenGL-контента, печать, поддержку операций Drag and Drop, 2D-графики, технологии Win32 OLE.
Библиотека JFace дополняет библиотеку SWT и создана на основе библиотеки SWT с реализацией архитектуры MVC (Model-View-Controller), предоставляя такие MVC GUI-компоненты как таблица, дерево, список, текстовая область и диалоговое окно, обеспечивая определение пользовательских команд независимо от их представления в GUI-интерфейсе, управление шрифтами и изображениями, помощь пользователю в выборе соответствующего содержания для полей в GUI-компонентах, выполнение длительных задач.
Библиотека Java 3D была создана как высокоуровневая библиотека для создания 3D графики, включая анимацию 3D-объектов.
Библиотека Java 3D не включена в официальный релиз JRE/JDK и требует отдельной установки.
Библиотека Java 3D оперирует объектами, размещаемыми в графе сцены, который представляет собой дерево 3D-объектов и предназначен для визуализации.
Java3D-приложение может работать как настольное приложение, как апплет или как настольное приложение и апплет.
По сути, библиотека Java 3D является оберткой графических библиотек OpenGL и DirectX.
Каждая из вышеперечисленных графических библиотек имеет свои преимущества и недостатки, в числе которых надо отметить тот факт, что данные библиотеки не удовлетворяют современным требованиям работы с медиаконтентом. Кроме того, данные библиотеки не обеспечивают возможность декларативного создания GUI-интерфейса на основе языка XML.
JavaFX создана как универсальная платформа, предоставляющая современные GUI-компоненты с возможностью их декларативного описания, богатый набор библиотек для работы с медиаконтентом и 2D/3D графикой, а также высокопроизводительную среду выполнения приложений.
Первоначально, с 2007 по 2010 год, версии 1.1, 1.2 и 1.3 платформы JavaFX содержали:
- Декларативный язык программирования JavaFX Script создания UI-интерфейса.
- Набор JavaFX SDK, обеспечивающий компилятор и среду выполнения.
- Плагины для сред выполнения NetBeans IDE и Eclipse.
- Плагины для Adobe Photoshop и Adobe Illustrator, позволяющие экспортировать графику в код JavaFX Script, инструменты конвертации графического формата SVG в код JavaFX Script.
Платформа JavaFX версии 2.0 выпуска 2011 года кардинально отличалась от платформы JavaFX версии 1.х.
Платформа JavaFX 2.х больше не поддерживала язык JavaFX Script, а вместо этого предлагала новый программный интерфейс JavaFX API для создания JavaFX-приложений полностью на языке Java.
Для альтернативного декларативного описания графического интерфейса пользователя платформа JavaFX 2.х предлагала новый язык FXML.
Кроме того, платформа JavaFX 2.х обеспечивала новые графический и медиа движки, улучшающие воспроизведение графического и мультимедийного контента, обеспечивала встраивание HTML-контента в приложения, новый плагин для Web-браузеров, широкий выбор GUI-компонентов с поддержкой CSS3, 2D графику, создание отчетов с диаграммами, интеграцию с библиотекой Swing.
При этом платформа JavaFX версии 2.х содержала:
- Набор JavaFX SDK, предоставляющий инструмент JavaFX Packager tool компиляции, упаковки и развертывания JavaFX-приложений, Ant-библиотеку для сборки JavaFX-приложений, библиотеки JavaFX API и документацию.
- Среду выполнения JavaFX Runtime для работы настольных JavaFX-приложений и JavaFX-апплетов.
- Поддержку платформы JavaFX 2.х для среды выполнения NetBeans IDE 7.
- Примеры JavaFX-приложений.
- Приложение JavaFX Scene Builder 1.х для визуальной компоновки GUI-компонентов в GUI-интерфейс с использованием языка FXML.
В дальнейшем платформа JavaFX была полностью интегрирована в платформу Java 8, и перестала требовать отдельной инсталляции.
Кроме того, платформа JavaFX 8 была дополнена программным интерфейсом CSS API, интеграцией с библиотекой SWT, программным интерфейсом Printing API, 3D графикой, программным интерфейсом SubScene API.
Также платформа JavaFX 8 предлагает улучшенный инструмент JavaFX Scene Builder 2.х для визуальной компоновки GUI-компонентов в GUI-интерфейс на основе языка FXML, дополненный поддержкой новых возможностей платформы JavaFX 8, программным интерфейсом JavaFX Scene Builder Kit для встраивания инструмента в Java приложения, возможностью добавлять пользовательские GUI-компоненты и др.
В настоящее время технология JavaFX обеспечивает создание мощного графического интерфейса пользователя (Graphical User Interface (GUI)), 2D и 3D графику для крупномасштабных приложений, ориентированных на обработку данных, насыщенных медиа-приложений, поставляющих разнообразный медиа-контент пользователю, Mashup-приложений, объединяющих различные Web-ресурсы для пользователя, обеспечивает создание компонентов высококачественной графики и анимации для Web-сайтов, различного рода пользовательских программ, насыщенных графикой, анимацией и интерактивными элементами.
JavaFX как RIA платформа
Развитие Всемирной паутины привело в 2005 году к рождению архитектуры Web 2.0 – набору рекомендаций и решений для создания и поддержки Web-ресурсов, при реализации которых распределенные системы Web 2.0 становятся тем более насыщенными контентом, чем больше пользователей ими пользуются, причем качество такой распределенной системы зависит от уровня взаимодействия и активности пользователей, в отличие от интернет-систем архитектуры Web 1.0, где за качество поставляемого контента целиком и полностью отвечает владелец Web-ресурса.
На базе концепции Web 2.0 развития интернет-технологий стали формулироваться концепции Web 3.0 (взаимодействие интернета с физическим миром) и Web 4.0 (массовое использование пользователями мини-компьютеров).
Web-приложения архитектуры Web 2.0 ориентированы на совместное использование информации, а также взаимодействие и сотрудничество участников Всемирной паутины. Примером Web 2.0 систем могут служить социальные сети, блоги, файловые и видео хостинги и т.д.
При миграции клиент-серверных систем от Web 1.0 к Web 2.0 клиентское приложение становится не просто «тонким клиентом», отображающим формируемое сервером статическое содержимое в виде HTML-страниц, а насыщенным интернет-приложением RIA (Rich Internet Аpplication) – Web-приложением, предоставляющим большую интерактивность для клиента.
Большая, по сравнению с традиционным «тонким клиентом», интерактивность RIA-приложения обеспечивается за счет богатого графического GUI-интерфейса пользователя, содержащего, помимо разнообразных компонентов контроля, анимацию, 2D и 3D графику и аудио-видео ролики, при этом приемлемая скорость работы такого приложения достигается с помощью переноса части выполняемого кода с сервера на сторону клиента. Таким образом, RIA-приложение является промежуточным между «тонким клиентом» и «толстым клиентом» – настольным приложением. RIA-приложение доступно множеству пользователей с помощью сети Интернет, но имеет GUI-интерфейс близкий к настольному приложению.
Традиционный «тонкий клиент» использует для взаимодействия с сервером HTML-разметку и простой JavaScript-код и не требует загрузки и инсталляции дополнительного программного обеспечения. В отличие от «тонкого клиента» RIA-приложение создается на базе определенной платформы, предоставляющей язык программирования и набор библиотек программного интерфейса, и его работа на стороне клиента в некоторых случаях требует наличия среды выполнения соответствующей платформы, которую необходимо предварительно загрузить и инсталлировать. Такой средой выполнения, как правило, служит плагин Web-браузера.
Без установки дополнительных плагинов Web-браузера RIA-приложения можно также создавать на основе языка разметки HTML5 и различных JavaScript-библиотек, таких как jQuery, Yahoo!, MochaUI и др.
Преимуществом RIA-приложения перед настольным приложением является отсутствие необходимости его специальной установки на клиентском компьютере – RIA-приложение предоставляется определенной областью на страничке Web-браузера, при этом RIA-приложение обеспечивает автоматическое обновление версий и кросс-платформенность, так как его оберткой служит Web-браузер. Кроме того, работа RIA-приложения автоматически защищена «песочницей» Web-браузера.
Создание RIA-приложений на сегодняшний день обеспечивают такие технологии как Adobe Flash, JavaFX, Microsoft Silverlight, Eclipse Remote Application Platform (RAP), Google Web Toolkit (GWT), HTML5.
Вышеупомянутые RIA-платформы Adobe Flash, JavaFX и Microsoft Silverlight позволяют разрабатывать не только Web-приложения, работающие в Web-браузере, но и настольные приложения, которые способны работать в режиме оффлайн. Для платформы Adobe Flash – это AIR-приложения или SWF-файлы, запускаемые автономно плеером Flash Player, для платформы Microsoft Silverlight – это Web-приложения, помещенные в специальный каталог со ссылками из «Рабочего стола» или из меню «Пуск».
Что касается технологии JavaFX, то один и тот же Java-код, созданный на базе платформы JavaFX, может запускаться как настольное приложение, которое разворачивается на клиентском компьютере автономно, может разворачиваться как Java Web Start приложение, или может отображаться в Web-браузере как JavaFX-апплет, встроенный в HTML-страничку.
Интегрированность технологии JavaFX со средой выполнения JRE, что обеспечивает выполнение JavaFX-кода в Web-браузере, наличие большого выбора современных GUI-компонентов, возможность отображения анимации, 2D и 3D графики, аудио-видео контента – все это в полной мере позволяет создавать RIA-приложения на базе платформы JavaFX.
JavaFX для создания GUI
Компоненты графического интерфейса пользователя платформы JavaFX представлены такими пакетами JavaFX API как javafx.scene.control, javafx.scene.chart, javafx.scene.image, javafx.scene.layout, javafx.scene.media, javafx.scene.shape, javafx.scene.canvas, javafx.scene.text, javafx.scene.web и javafx.stage.
Все компоненты GUI-интерфейса являются объектами Node узлов графа сцены и характеризуются идентификатором, CSS-стилем, границами, визуальными эффектами, прозрачностью, трансформациями, обработчиками событий, состоянием, режимом наложения и участием в анимации.
Пакет javafx.scene.control предоставляет такие GUI-компоненты как панель Accordion, кнопку Button, переключатель CheckBox, список ChoiceBox, выбор цвета ColorPicker, выпадающий список ComboBox, выбор даты DatePicker, контекстное меню ContextMenu, гиперссылку Hyperlink, метку Label, список ListView, меню Menu, панель MenuBar, кнопку MenuButton, постраничную навигацию Pagination, поле PasswordField, индикатор ProgressBar, индикатор ProgressIndicator, переключатель RadioButton, панель ScrollPane, прокрутку ScrollBar, разделитель Separator, бегунок Slider, кнопку SplitMenuButton, панель SplitPane, таблицу TableView, панель TabPane, поле TextArea, поле TextField, панель TitledPane, кнопку ToggleButton, группу ToggleGroup, панель ToolBar, окно Tooltip, таблицу TreeTableView, дерево TreeView.
Пакет javafx.scene.chart обеспечивает создание диаграмм AreaChart, BarChart, BubbleChart, LineChart, PieChart, ScatterChart, StackedAreaChart, StackedBarChart.
Пакет javafx.scene.image предоставляет GUI-компоненты изображения ImageView и WritableImage.
Пакет javafx.scene.layout предоставляет панели компоновки AnchorPane, BorderPane, FlowPane, GridPane, HBox, StackPane, TilePane, VBox.
Пакет javafx.scene.media предоставляет GUI-компоненты медиаконтента MediaView и аудиоконтента AudioClip.
Пакет javafx.scene.shape обеспечивает рисование 2D геометрических форм с помощью таких GUI-компонентов как Arc, Circle, CubicCurve, Ellipse, Line, Path, Polygon, Polyline, QuadCurve, Rectangle, SVGPath, а также 3D графики с помощью таких GUI-компонентов как Box, Cylinder, MeshView, Sphere.
Пакет javafx.scene.canvas позволяет с помощью классов Canvas и GraphicsContext создавать изображения 2D-графики из простых геометрических форм, из существующих изображений и текста.
Пакет javafx.scene.text предоставляет GUI-компоненты текста Text и TextFlow.
Пакет javafx.scene.web обеспечивает отображение HTML-контента с помощью GUI-компонента WebView и редактирование HTML-контента с помощью GUI-компонента HTMLEditor.
Пакет javafx.scene предоставляет группу Group и сцену Scene, а также камеры ParallelCamera и PerspectiveCamera и источники света AmbientLight и PointLight.
Пакет javafx.stage предоставляет GUI-компоненты окон Stage, Popup, DirectoryChooser и FileChooser.
Пакеты javafx.embed.swing и javafx.embed.swt обеспечивают встраивание JavaFX GUI-компонентов в Swing (и наоборот) и SWT приложения.
Пакет javafx.css позволяет определять пользовательские свойства и CSS псевдо классы для GUI-компонентов.
Пакет javafx.print обеспечивает печать узла графа JavaFX сцены.
Пакет javafx.fxml обеспечивает декларативное XML описание GUI-компонентов.
Пакет javafx.scene.effect позволяет присоединять к GUI-компонентам визуальные эффекты смешивания, свечения, тени, размытия, цвета, смещения, освещения, перспективы, отражения, старения.
Пакет javafx.animation позволяет добавлять трансформации и анимации для GUI-компонентов.
Программный интерфейс на русском языке можно увидеть на сайте
JavaFX и 2D графика
Отображение 2D графики в JavaFX-приложениях возможно тремя способами:
- Пакет javafx.scene.shape обеспечивает создание Node-узлов графа сцены, отображающих простые геометрические формы: дуга, окружность, эллипс, кривые, линия, многоугольник, ломаная линия, прямоугольник, а также текст.
- Пакет javafx.scene.image с помощью класса ImageView обеспечивает отображение существующего изображения, загружаемого с помощью класса Image. Кроме того, данный пакет предоставляет класс WritableImage, который позволяет создавать изображение из набора пикселей с последующим отображением в узле графа сцены ImageView.
- Пакет javafx.scene.canvas обеспечивает создание узла графа сцены Canvas с последующим рисованием в нем простых геометрических форм, заполнение Canvas-узла изображением и текстом.
Если сравнивать JavaFX 2D графику с 2D графикой библиотек AWT/Swing, можно сказать, что если не вдаваться в детали различающихся моделей программирования, JavaFX 2D графика обеспечивает ту же функциональность, что и AWT/Swing 2D графика, упрощая добавление к объектам 2D графики визуальных эффектов, трансформаций и анимации. Надо также отметить, что в отличие от AWT/Swing, JavaFX предоставляет для использования готовые 2D примитивы в виде узлов графа сцены, в то время как в AWT/Swing их нужно рисовать.
JavaFX и 3D графика
Отображение 3D графики в JavaFX-приложениях возможно двумя способами.
Первый способ – это создание 2D объекта графа сцены и применение к нему 3D трансформаций.
Второй способ – использование классов Box, Cylinder, MeshView, Sphere пакета javafx.scene.shape, представляющих готовые Shape3D графические примитивы куб, цилиндр, поверхность и сфера.
При этом узлы Shape3D графа сцены имеют такие свойства как материал, режим рисования и отображение внутренних поверхностей. Также к узлам Shape3D графа сцены могут применяться такие эффекты как камера, освещение, трансформации и анимация.
Если сравнивать JavaFX 3D графику с 3D графикой библиотеки Java 3D, можно сказать, что если не вдаваться в детали различающихся моделей программирования, JavaFX 3D графика обеспечивает ту же функциональность, что и Java 3D графика, за исключением использования класса Canvas3D библиотеки Java 3D, позволяющего 3D рисование.
Основные возможности JavaFX
- Программный интерфейс JavaFX API для создания на языке Java JavaFX-приложений с богатым GUI-интерфейсом, 2D/3D графикой, анимацией и аудио-видео контентом.
- Интегрированность с JRE/JDK.
- Альтернативное декларативное XML-описание GUI-интерфейса на языке FXML.
- Инструмент JavaFX Scene Builder для визуальной компоновки GUI-компонентов в GUI-интерфейс на основе языка FXML.
- За счет интегрированности с JRE/JDK и JRE-плагина Web-браузера один и тот же Java-код, созданный на базе платформы JavaFX, может запускаться как настольное приложение, которое разворачивается на клиентском компьютере автономно, может разворачиваться как Java Web Start приложение, или может отображаться в Web-браузере как JavaFX-апплет, встроенный в HTML-страничку.
- Изменение внешнего вида GUI-компонентов с использованием CSS.
- Встраивание HTML-контента в JavaFX-приложение с помощью компонента WebView с возможностью выполнения Javascript-кода и редактирование HTML-контента с помощью компонента HTMLEditor.
- Интеграция с библиотеками Swing и SWT.
- Создание красочных и насыщенных отчетов с диаграммами данных.
- Возможность разработки JavaFX-приложений в NetBeans IDE и Eclipse IDE.
- Богатый набор компонентов и компоновок компонентов для создания GUI-интерфейса.
- Встраивание аудио и видео контента в JavaFX-приложение с помощью компонентов MediaView и AudioClip.
- Отображение 2D и 3D графики с добавлением визуальных эффектов, трансформаций и анимации.
- Создание изображений 2D-графики из простых геометрических форм, из существующих изображений и текста с помощью Canvas API.
- Поддержка Rich Text с помощью пакета javafx.scene.text.
- Использование визуальных эффектов, камеры, источников света, трансформаций и анимации.
- Печать узла графа JavaFX сцены с помощью Printing API.
- Связывание данных.
- Выполнение фоновых задач.
- Разделение сцены на подсцены с помощью SubScene API.
Источник: TM SoftStudio