Учебник по JavaFX: начало работы

Привет, Хабр! Представляю вашему вниманию перевод статьи «JavaFX Tutorial: Getting started» автора Vojtech Ruzicka.

Как настроить и начать работать с JavaFX, с помощью Maven, Gradle или JavaFX SDK.

Все посты в серии JavaFX:

  1. Учебник по JavaFX: начало работы
  2. Учебник по JavaFX: Привет, мир!
  3. Учебник по JavaFX: FXML и SceneBuilder
  4. Учебник по JavaFX: основные макеты
  5. Учебник по JavaFX: расширенные макеты
  6. Учебник по JavaFX: CSS стилизация
  7. JavaFX Weaver: интеграция JavaFX и Spring Boot приложения

Установка 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.
Поделиться публикацией
AdBlock похитил этот баннер, но баннеры не зубы — отрастут

Подробнее
Реклама

Комментарии 25

    –1
    Его реально кто-то юзает сейчас? Просто технология выглядела мертворожденной.
      +3

      Используем, прямо сейчас.
      Как заменили Swing — так продолжаем.
      Вашу альтернативу UI для толстого клиента на JVM можно узнать?

        0

        Ради интереса: а почему именно толстого и почему именно JVM? Кажется сейчас мир движется в сторону технологий типа электрона. И, на мой взгляд, это имеет смысл, т.к. фронт-енд девелоперам привычнее и интереснее писать UI, чем джавистам/дотнетчикам и т.п.


        В прошлой компании я поработал полгода с Java FX, и не назвал бы этот опыт строго положительным. Есть много плюсов по сравнению со Swing (bindings, "css", получше выглядит), но в целом помедленнее, побольше багов и некоторые вещи тяжело кастомизируются.
        И, при возможности, я бы для проектов выбирал всякие электроны для десктопов, чем java FX. По крайней мере с точки зрения скорости и удобства разработки.


        Разумеется, такой выбор не всегда возможен.

          +4
          1. Потому, что продукт уже был, и логику переоводить на js смысла не имело никакого, и никто за это не заплатит
          2. Т.к нет фронтендеров, и нанимать их не планируется
          3. Ну и web интерфейс тоже есть, отдельно, попроще, для желающих
            0

            Понятно, спасибо!

          0
          По какой причине заменили свинг?
          Сейчас тоже внедряю свинг, но хотелось бы и альтернативные мнения услышать.
            +1
            + Никакая поддержка видео в свинге. Точнее, она как бы есть, но через включаемый кусочек FX'a. После некоторых мытарств переписал клиента на FX полностью.
            + Удобный TableLayout (если я правильно вспомнил название) в FX'e. Заменил им грид свинга и родной грид самого FX'a. Через него же стало удобнее генерировать формочки ввода/редактирования.
            + Для векторной картографии и графиков удобно использовать Shape в FX, чем рисовать самому в Canvas'e
            — Как-то баговато там с focus'ами, работало через раз.
            — Свинговый клиент работает быстрее FX'ового, клиенты складской проги упорно сидят на старой версии.

            В конце концов у меня перестало хватать времени на поддержку настольной и андроид версий и я перешёл на Kotlin/JS + Vue.js.
            Вы не поверите, но кода стало меньше. Без особых мучений перетащил функционал (поддержка видео пока в процессе).
            Истины ради скажу, что работать стало ещё чуток медленнее, но пока достаточно.
            Ну и до кучи за счёт «вебнутости» получил ios-клиентов.
              +1

              Тупо не современный, и выглядит просто страшно.

                0
                Согласен, если речь о свинге.
              0
              От продукта конечно зависит, но как вариант, в свое время, рассматривал netbeans как скелет приложения ( можно и eclipse ) и функционал наращивать уже на его ядре.
              +1
              +1
              Аналогичный вопрос. Он еще жив? Где применяется?
                0

                Для UI в толстых десктопных клиентах на Kotlin, например.
                Расскажите про альтернативу, всем будет интересно.

                  0
                  Сейчас идет так:

                  1) Тебе нужное какое-то приложение для обработки бизнес-логики (делай веб-морду или делай электрон). Работает электрон не самым легким способом, конечно, но идет постепенно прогресс и улучшения.

                  2) Нужны какие-то серьезные и тяжелые приложения на машине (Аля ворд, фотошоп, adope premier итд) — добро пожаловать в мир C++.

                  Сам Майкрософт фактически на последней конференции заявил, что они не планируют развивать классический десктоп (windows forms/WPF/UWP), и будут полагаться на электрон приложения.

                  __

                  Что касается Java мира, то достаточно популярен Swing, который имеет за собой такого монстра, как JetBrains (которые просто уже не могут с него слезть на что-то другое и поддерживают и развивают).

                  А Вот JavaFX — это поделка, которая должна была дать бой UWP, но фактически вышла, когда уже в ней не было особого смысла. И Оракл достаточно быстро выбросил его на улицу в опенсорс.

                  Т.е. Swing хотя бы надежен и кем-то поддерживается, когда JavaFX…

                    +1

                    С таким же успехом можно сказать, что Оракл и остальное выбросил в опенсорц, т.к. всегда была openjdk.
                    И что там с поддержкой FX не так, я не очень понимаю, если честно.
                    Оно работает не хуже Swing, всяко не студенческая поделка.
                    Да, есть интересные места, особенно если начинать косо-криво городить свои компоненты, но и тогда их всегда можно обойти.

                      0
                      >Сейчас идет так:
                      А можно узнать, сколько у вас лично опыта применения? Судя по постам, вы вообще к миру Java не имели отношения.
                        0
                        Т.е. Swing хотя бы надежен и кем-то поддерживается, когда JavaFX…
                        Ну, FX уже лет 7 не пилится, по сравнению со всем остальным, поэтому кажется, что подделка. У Джавы другие задачи, и интерфейс — как исключение, вот и забили. А жаль.
                        0

                        Хотелось бы подробностей. Для меня Ява в десктопе закончилась на томкат. Что даёт котлин, и как это в исполняемый файл упаковывается? Ищу что нибудь что буду понимать. QT не дался.

                          0

                          В какой исполняемый файл, там такой же .jar.
                          Для запуска нужно использовать JVM.
                          Если позволяют средства — есть инсталляторы, которые систему не замусоривают и можно иметь для каждой версии свою версию ява-машины.
                          Есть еще грааль, но UI я с ним не щупал, там прямо native получается.

                            0

                            Искал решение которое решит все мои проблемы. Жаль что не так. Чуточку поясню. Хочу сделать некую экосистему с заменой 1с в рознице. Не бухгалтерию, а именно оперативную область. Для начала решил сделать приложение ТСД, второй частью заменить место кассира, третьей оперативную часть с CRM. И потом и бэк.

                      0
                      Ещё как жив, и применяется, как ни странно, на десктопе)) Просто есть места, где программа должна быть кросплатформенной, без браузера и достаточно простая в установке как сервера, так и клиента. Мне лично достаточно удобно писать на kotlin + exposed + tornadofx, разработка быстрая и удобная.
                      Но свистопляска с версиями java и javafx напрягает — где то можно на java поставить javafx, а где-то не ставится, где-то можно собрать бинарник, а где-то ругается на отсутствующие части java
                        0

                        openjdk решает проблемы, не так ли?
                        Ну и инсталлятор типа install4j никто не отменял.

                          –1
                          1) openjdk не решает проблемы, потому как полгода назад javafx 13 не работала вместе с openjdk. Сейчас не знаю, работаю на Liberica, там javafx встроена
                          2) А install4j не работает, потому как «в энтой версии джавы нету fx:deploy»
                          В общем и целом, надо потратить время и разобраться, но времени нету. С сожалением вспоминаю времена, когда в delphi нажал F9, и через 10 сек бинарник готов…
                            0

                            Ну, есть еще zulu, но, возможно, в мире Java реально нужно постоянно на свеженьких версиях сидеть, чего не требуется для Котлина.

                        0
                        Да, было дело, нарисовал себе приложение, по подсказке знакомого на SWINGe, потом допилил для работы, а в начале этого года решил перерисовать на FX, думал, что получится очень быстро. Но, не всё так быстро, как бы хотелось. Да, функционал не сравнить, но жрет больше. Да и глаз радует больше, чем даже фил энд лук МакОС. Но это так, вкусовщина.
                        fougasse
                        Смотрю у вас много опыта на JavaFX, у меня есть несколько вопросов, если позволите. Работали ли с alias'ами? В сети даже близко не нашел ответов, да и на Тостере тоже не ответили. В табличке по условию нужен цвет, но было 2 попытки, не получилось и забил. Не сильно критично, но визуал очень помогает.

                        Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                        Самое читаемое