JavaFX - это набор инструментов GUI для Java (GUI - сокращение от Graphical User Interface). JavaFX упрощает создание настольных приложений и игр на Java. Это руководство по JavaFX представляет собой многостраничное руководство, объясняющее основные функции JavaFX. См. Список статей в разделе, чтобы увидеть все темы, затронутые в этом руководстве по JavaFX (на мобильных устройствах проверьте содержание следа на нижней панели навигации). Далее на этой странице есть обширный список.

Почему именно JavaFX?

JavaFX является отличной платформой для приложений с графическим интерфейсом по нескольким причинам. Прежде всего, Java по-прежнему остается одним из самых популярных языков программирования в мире с большим набором стандартных классов и богатым набором инструментов с открытым исходным кодом, разработанных сообществом разработчиков Java.

Во-вторых, JavaFX может работать на всех следующих ОС и устройствах:

  • Windows
  • Linux
  • Mac
  • iOS
  • Android / Chromebook
  • Raspberry Pi

Это делает JavaFX универсальным набором инструментов для разных ОС и устройств.

В-третьих, JavaFX поставляется с богатым набором элементов управления с графическим интерфейсом, а наборы инструментов с открытым исходным кодом добавляют еще больше инструментов в общую экосистему.

Возможности JavaFX

JavaFX поставляется с большим набором встроенных компонентов графического интерфейса пользователя, таких как кнопки, текстовые поля, таблицы, деревья, меню, диаграммы и многое другое. JavaFX можно стилизовать с помощью CSS и / или программно. JavaFX поставляется со встроенной библиотекой диаграмм, которую вы можете использовать для простых диаграмм. JavaFX поддерживает 2D и 3D графику. JavaFX имеет WebView, который может отображать современные веб-приложения.

Вот более полный список концепций, компонентов и функций JavaFX:

Сторонние ресурсы JavaFX

Есть несколько интересных сторонних ресурсов. Я перечислил некоторые из них здесь:

  • JavaFX Drift - OpenGL и др. Поддержка JavaFX. Полная интеграция в граф сцены.
  • ControlsFX - Дополнительные элементы управления пользовательского интерфейса для JavaFX.
  • GemsFX - Дополнительные элементы управления пользовательского интерфейса для JavaFX.
  • TilesFX - Дополнительные элементы управления пользовательского интерфейса для JavaFX.

Ресурсы, связанные с JavaFX:

  • Skija - Быстрая 2D-графика для Java - с использованием графики с аппаратным ускорением.

Приложения JavaFX

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

  • DBFX - бесплатное графическое приложение для управления базами данных (консоль управления).

Почему настольные приложения?

Почему собственные / локальные приложения предпочтительнее для мобильных устройств, а веб-приложения - для настольных компьютеров? Почему собственные  / локальные приложения не подходят для обоих типов устройств?

Собственные / локальные приложения, как правило, обеспечивают лучший пользовательский интерфейс, чем веб-приложения, поскольку они более отзывчивы (быстрее, быстрее), имеют более продвинутые элементы управления графическим интерфейсом и лучше интегрируются с локальным устройством. Две самые большие проблемы для традиционных настольных приложений - это низкая пропускная способность Интернета и громоздкий процесс установки. Обе эти проблемы в значительной степени решены с помощью высокоскоростных подключений к Интернету, которые довольно распространены, а также с помощью магазинов приложений для частных устройств и систем установки по требованию для корпоративных машин.

На мой взгляд, родные / локальные приложения должны быть предпочтительнее для всех приложений, которые часто используются или где рабочий процесс несколько сложен. Собственные / локальные приложения также должны быть предпочтительны для приложений, которым необходим доступ к локальному диску компьютера, на котором они работают, или которым необходимо взаимодействовать со многими различными удаленными системами, а иногда и с использованием других протоколов, кроме HTTP (например, IAP или потоковых протоколов и т. Д. ). См. Примеры использования JavaFX для получения дополнительных примеров приложений.

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

Примеры использования JavaFX

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

Как упоминалось во введении, мы в Nanosai на самом деле разрабатываем настольное приложение с использованием JavaFX. Мы делаем это, потому что этому приложению нужен доступ к локальному диску, он должен иметь возможность взаимодействовать через другие сетевые протоколы, кроме HTTP, и ему нужны некоторые другие функции, которые стандартный веб-браузер просто не предоставляет.

Вот список некоторых общих вариантов использования JavaFX:

  • Инструменты разработчика
    • IDE
    • Редакторы
    • Инструменты сжатия / шифрования файлов
    • Инструменты сканирования локального диска
  • Инструменты обслуживания локальной системы
    • Инструменты резервного копирования
    • Сканирование на вирусы
  • Служебные приложения
    • Skype / Messenger / Чат
    • Инструменты для создания снимков экрана
    • Редактирование фото и видео
    • Видео плееры
    • Редактирование аудио
    • Аудиоплееры
  • Игры
  • Инструменты для анализа данных

Вот некоторые из настольных приложений, которые я регулярно использую:

  • IntelliJ IDEA
  • Notepad++
  • SourceTree
  • SnagIt
  • Putty
  • WinSCP
  • Skype
  • Signal
  • Telegram
  • PhotoShop
  • Premiere Pro
  • VideoLAN (VLC)
  • EDraw

Кроме того, несколько компаний, которые начали с веб-приложений, позже добавили собственные / локальные настольные приложения. Вот некоторые из них:

  • YouTube Music
  • Spotify
  • Microsoft Teams
  • Slack
  • Google Drive

JavaFX на мобильных устройствах

Gluon предлагает набор инструментов, которые помогут вам создать и упаковать приложение JavaFX в виде собственных образов для мобильных устройств (Android и iOS).

JavaFX на Raspberry Pi

Также можно запустить JavaFX на компьютере Raspberry Pi. Вы можете узнать больше о том, как запустить JavaFX на Raspberry Pi, в книге Getting started with Java on the Raspberry Pi

JavaFX из Java 11

Начиная с Java 11, JavaFX снова был удален из Java SDK. JavaFX был выделен в собственный проект с открытым исходным кодом. Это означает, что для загрузки JavaFX из Java 11 / JavaFX 11 вам необходимо перейти по ссылке:

http://openjfx.io

Однако JavaFX продолжает развиваться и по-прежнему пользуется большой популярностью среди пользователей.

Игровой движок JavaFX

Алмас Баим создал  игровой движок FXGL JavaFX. Вы можете найти его:

https://github.com/AlmasB/FXGL

JavaFX против Swing

Возможно, вы знаете, что в Java есть еще один набор инструментов с графическим интерфейсом, который называется Java Swing (или JFC). Если вам интересно, в чем разница между двумя наборами инструментов, я перечислил некоторые из основных различий ниже:

FeatureJavaFXSwing
Привязки свойств Свойства JavaFX поддерживают привязку, то есть вы можете отслеживать изменения в их значениях. Свойства Swing не поддерживают привязку напрямую.
Декларативный макет JavaFX поддерживает декларативную компоновку через FXML. Swing не имеет встроенной поддержки декларативного макета.
Дизайн JavaFX поддерживает стили на основе CSS и кода. Swing поддерживает только стили на основе кода.
Веб-просмотр JavaFX имеет WebView, который может отображать современные веб-страницы. Swing не имеет WebView.
Графика JavaFX использует векторную графику. Swing использует графику на основе пикселей.
3D Графика JavaFX имеет встроенную поддержку 3D-графики. Swing требует Java 3D API для трехмерной графики.
API параллелизма JavaFX имеет встроенный API параллелизма. Swing не имеет встроенного API параллелизма.
Возраст инструментария JavaFX новее. Качели старше.
Включен в Java SDK JavaFX не входит в состав Java 11 и более поздних версий. Swing все еще включен, но, вероятно, когда-нибудь будет удален.

Примеры JavaFX на GitHub

Для вашего удобства я начал добавлять многие примеры JavaFX из этого руководства в общедоступный репозиторий GitHub. Примеры - это готовые к запуску автономные примеры, каждый со своим собственным методом class + main () для запуска этого конкретного примера. Вот репозиторий GitHub:

Примеры JavaFX на GitHub

Книги по JavaFX

Вот самые полезные книги о JavaFX, которые я прочитал:

JavaFX JavaDoc

Вы можете найти JavaFX 11 JavaDoc здесь:

https://openjfx.io/javadoc/11/