Как настроить и начать работать с JavaFX, с помощью Maven, Gradle или JavaFX SDK.
Все посты в серии JavaFX:
- Учебник по JavaFX: начало работы
- Учебник по JavaFX: Привет, мир!
- Учебник по JavaFX: FXML и SceneBuilder
- Учебник по JavaFX: основные макеты
- Учебник по JavaFX: расширенные макеты
- Учебник по JavaFX: CSS стилизация
Установка Java
JavaFX, конечно, требует, чтобы у вас был установлен JDK. Получение необходимых зависимостей различается для разных версий Java.
JavaFX был представлен как часть выпуска Java 8. Однако позже он был удален из JDK и
перенесен в отдельный модуль в Java 11.
Это означает, что если вы ориентируетесь на Java 8-10, у вас есть все необходимые зависимости как часть вашего JDK уже. Ура! Если вы используете более новую версию Java — то есть 11+, вам нужно получить зависимости отдельно.
Maven
Получение и управление зависимостями вручную довольно неудобно, и в реальном приложении Вы бы редко так делали. Гораздо лучше использовать систему управления зависимостями, такую как Maven или Gradle. Таким образом, вы можете просто объявить, какие зависимости вы используете и какие версии, а система позаботится об остальном.
Архетип Maven
Конечно, вы можете настроить свой проект Maven вручную, с нуля. Тем не менее, вы можете предпочесть более удобный способ создания структуры и содержания базового проекта для вас с помощью Maven.
Maven имеет понятие архетипов, которое по существу означает, что вы можете создавать различные типы проекты из шаблона. Существуют многочисленные архетипы для различных типов проектов, и к счастью, есть пара для JavaFX. Архетип, который вы можете выбрать, зависит от того, какую версию Java вы используете.
Вы можете прочитать больше об архетипах Maven в следующем посте: Maven archetypes tutorial.
Архетип Java 8
Вы можете использовать com.zenjava:javafx-basic-archetype, или вы можете найти другие архетипы самостоятельно, если этот вам не подходит.
Вы можете легко сгенерировать проект из командной строки с помощью Maven, используя указанный выше архетип:
mvn archetype:generate -DarchetypeGroupId=com.zenjava -DarchetypeArtifactId=javafx-basic-archetype
Кроме того, вы можете создать новый проект Maven из архетипа прямо в вашей IDE.
Архетип Java 11
Для Java 11 вы можете использовать org.openjfx: javafx-archetype-simple.
Для создания проекта просто запустите:
mvn archetype:generate -DarchetypeGroupId=org.openjfx -DarchetypeArtifactId=javafx-archetype-simple
Ручная настройка Maven
Если вы хотите больше контроля, вы можете настроить свой проект Maven вручную, не генерируя его из архетипа.
Для начала вам понадобятся два компонента. Первый — Maven Plugin для Java FX.
Просто добавьте следующее в ваш pom.xml:
<build>
<plugins>
<plugin>
<groupId>org.openjfx</groupId>
<artifactId>javafx-maven-plugin</artifactId>
<version>0.0.3</version>
<configuration>
<mainClass>com.example.App</mainClass>
</configuration>
</plugin>
</plugins>
</build>
Обратите внимание, что
<mainclass>
должен указывать на ваш основной класс, который имеет метод main и расширяет javafx.application.Application. Мы расскажем об этом в следующей статье серии.Вторая часть добавляет зависимость для элементов управления JavaFX:
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-controls</artifactId>
<version>11.0.2</version>
</dependency>
Gradle
В настоящее время Gradle не поддерживает создание проектов непосредственно из архетипов .
Вы можете использовать неофициальный плагин Gradle Archetype и использовать архетипы Maven, упомянутые выше.
Кроме того, вы можете создать свой проект с помощью Maven из архетипа, а затем преобразовать его в проект Gradle с помощью следующей команды в каталоге, содержащем ваш pom.xml:
gradle init
Ручная настройка Gradle
Как и в случае ручной настройки Maven, вам нужно добавить плагин JavaFX:
plugins {
id 'application'
id 'org.openjfx.javafxplugin' version '0.0.8'
}
И зависимость для элементов управления:
javafx {
version = "11.0.2"
modules = [ 'javafx.controls' ]
}
JavaFX SDK
Есть еще одна возможность использовать JavaFX локально. Вы можете скачать JavaFX SDK. Он содержит все необходимые библиотеки, которые вы можете затем связать с проектом в вашей IDE или добавить в classpath.
Это может быть полезно, когда вы не знакомы с Gradle или Maven и просто для локальной разработки.
При распределении вашего приложения это становится неудобным, так как вам нужно убедиться, что вы включили все необходимые зависимости.
С помощью этой опции вы можете сгенерировать проект без Maven/Gradle в вашей IDE, который содержит все необходимые файлы. В IntelliJ IDEA вы можете просто перейти на:
File > New > Project > JavaFX
Дополнительное чтение
Hello World JavaFX application source code — Gradle
Hello World JavaFX application source code — Maven
JavaFX 13 and IntelliJ
JavaFX 13 and NetBeans
JavaFX 13 and Eclipse
Что дальше
Эта статья является первой в серии JavaFX. В следующей мы расскажем, как создать и запустить ваше самое первое приложение JavaFX.
Комментарии (25)
MAXH0
02.11.2019 19:28-1Аналогичный вопрос. Он еще жив? Где применяется?
fougasse
03.11.2019 21:17Для UI в толстых десктопных клиентах на Kotlin, например.
Расскажите про альтернативу, всем будет интересно.Terras
03.11.2019 15:19Сейчас идет так:
1) Тебе нужное какое-то приложение для обработки бизнес-логики (делай веб-морду или делай электрон). Работает электрон не самым легким способом, конечно, но идет постепенно прогресс и улучшения.
2) Нужны какие-то серьезные и тяжелые приложения на машине (Аля ворд, фотошоп, adope premier итд) — добро пожаловать в мир C++.
Сам Майкрософт фактически на последней конференции заявил, что они не планируют развивать классический десктоп (windows forms/WPF/UWP), и будут полагаться на электрон приложения.
__
Что касается Java мира, то достаточно популярен Swing, который имеет за собой такого монстра, как JetBrains (которые просто уже не могут с него слезть на что-то другое и поддерживают и развивают).
А Вот JavaFX — это поделка, которая должна была дать бой UWP, но фактически вышла, когда уже в ней не было особого смысла. И Оракл достаточно быстро выбросил егона улицув опенсорс.
Т.е. Swing хотя бы надежен и кем-то поддерживается, когда JavaFX…
fougasse
03.11.2019 18:44С таким же успехом можно сказать, что Оракл и остальное выбросил в опенсорц, т.к. всегда была openjdk.
И что там с поддержкой FX не так, я не очень понимаю, если честно.
Оно работает не хуже Swing, всяко не студенческая поделка.
Да, есть интересные места, особенно если начинать косо-криво городить свои компоненты, но и тогда их всегда можно обойти.
sshikov
04.11.2019 20:45>Сейчас идет так:
А можно узнать, сколько у вас лично опыта применения? Судя по постам, вы вообще к миру Java не имели отношения.
striver
06.11.2019 12:14Т.е. Swing хотя бы надежен и кем-то поддерживается, когда JavaFX…
Ну, FX уже лет 7 не пилится, по сравнению со всем остальным, поэтому кажется, что подделка. У Джавы другие задачи, и интерфейс — как исключение, вот и забили. А жаль.
loki82
03.11.2019 20:33Хотелось бы подробностей. Для меня Ява в десктопе закончилась на томкат. Что даёт котлин, и как это в исполняемый файл упаковывается? Ищу что нибудь что буду понимать. QT не дался.
fougasse
03.11.2019 21:07В какой исполняемый файл, там такой же .jar.
Для запуска нужно использовать JVM.
Если позволяют средства — есть инсталляторы, которые систему не замусоривают и можно иметь для каждой версии свою версию ява-машины.
Есть еще грааль, но UI я с ним не щупал, там прямо native получается.loki82
03.11.2019 21:18Искал решение которое решит все мои проблемы. Жаль что не так. Чуточку поясню. Хочу сделать некую экосистему с заменой 1с в рознице. Не бухгалтерию, а именно оперативную область. Для начала решил сделать приложение ТСД, второй частью заменить место кассира, третьей оперативную часть с CRM. И потом и бэк.
oldd
03.11.2019 21:13Ещё как жив, и применяется, как ни странно, на десктопе)) Просто есть места, где программа должна быть кросплатформенной, без браузера и достаточно простая в установке как сервера, так и клиента. Мне лично достаточно удобно писать на kotlin + exposed + tornadofx, разработка быстрая и удобная.
Но свистопляска с версиями java и javafx напрягает — где то можно на java поставить javafx, а где-то не ставится, где-то можно собрать бинарник, а где-то ругается на отсутствующие части javafougasse
03.11.2019 21:23openjdk решает проблемы, не так ли?
Ну и инсталлятор типа install4j никто не отменял.oldd
03.11.2019 21:281) openjdk не решает проблемы, потому как полгода назад javafx 13 не работала вместе с openjdk. Сейчас не знаю, работаю на Liberica, там javafx встроена
2) А install4j не работает, потому как «в энтой версии джавы нету fx:deploy»
В общем и целом, надо потратить время и разобраться, но времени нету. С сожалением вспоминаю времена, когда в delphi нажал F9, и через 10 сек бинарник готов…fougasse
03.11.2019 21:31Ну, есть еще zulu, но, возможно, в мире Java реально нужно постоянно на свеженьких версиях сидеть, чего не требуется для Котлина.
striver
06.11.2019 12:43Да, было дело, нарисовал себе приложение, по подсказке знакомого на SWINGe, потом допилил для работы, а в начале этого года решил перерисовать на FX, думал, что получится очень быстро. Но, не всё так быстро, как бы хотелось. Да, функционал не сравнить, но жрет больше. Да и глаз радует больше, чем даже фил энд лук МакОС. Но это так, вкусовщина.
fougasse
Смотрю у вас много опыта на JavaFX, у меня есть несколько вопросов, если позволите. Работали ли с alias'ами? В сети даже близко не нашел ответов, да и на Тостере тоже не ответили. В табличке по условию нужен цвет, но было 2 попытки, не получилось и забил. Не сильно критично, но визуал очень помогает.
Terras
Его реально кто-то юзает сейчас? Просто технология выглядела мертворожденной.
fougasse
Используем, прямо сейчас.
Как заменили Swing — так продолжаем.
Вашу альтернативу UI для толстого клиента на JVM можно узнать?
bugy
Ради интереса: а почему именно толстого и почему именно JVM? Кажется сейчас мир движется в сторону технологий типа электрона. И, на мой взгляд, это имеет смысл, т.к. фронт-енд девелоперам привычнее и интереснее писать UI, чем джавистам/дотнетчикам и т.п.
В прошлой компании я поработал полгода с Java FX, и не назвал бы этот опыт строго положительным. Есть много плюсов по сравнению со Swing (bindings, "css", получше выглядит), но в целом помедленнее, побольше багов и некоторые вещи тяжело кастомизируются.
И, при возможности, я бы для проектов выбирал всякие электроны для десктопов, чем java FX. По крайней мере с точки зрения скорости и удобства разработки.
Разумеется, такой выбор не всегда возможен.
fougasse
bugy
Понятно, спасибо!
ukt
По какой причине заменили свинг?
Сейчас тоже внедряю свинг, но хотелось бы и альтернативные мнения услышать.
foatto
+ Никакая поддержка видео в свинге. Точнее, она как бы есть, но через включаемый кусочек FX'a. После некоторых мытарств переписал клиента на FX полностью.
+ Удобный TableLayout (если я правильно вспомнил название) в FX'e. Заменил им грид свинга и родной грид самого FX'a. Через него же стало удобнее генерировать формочки ввода/редактирования.
+ Для векторной картографии и графиков удобно использовать Shape в FX, чем рисовать самому в Canvas'e
— Как-то баговато там с focus'ами, работало через раз.
— Свинговый клиент работает быстрее FX'ового, клиенты складской проги упорно сидят на старой версии.
В конце концов у меня перестало хватать времени на поддержку настольной и андроид версий и я перешёл на Kotlin/JS + Vue.js.
Вы не поверите, но кода стало меньше. Без особых мучений перетащил функционал (поддержка видео пока в процессе).
Истины ради скажу, что работать стало ещё чуток медленнее, но пока достаточно.
Ну и до кучи за счёт «вебнутости» получил ios-клиентов.
dporollo
Тупо не современный, и выглядит просто страшно.
val6852 Автор
Согласен, если речь о свинге.
SnowBearRu
От продукта конечно зависит, но как вариант, в свое время, рассматривал netbeans как скелет приложения ( можно и eclipse ) и функционал наращивать уже на его ядре.
val6852 Автор
20 JavaFX real-world applications