Java — Java Fx или Swing


Содержание

Swing vs JavaFx для настольных приложений

У меня очень большая программа, которая в настоящее время использует SWT. Программа может работать как на Windows, Mac и Linux, так и на большом настольном приложении со многими элементами. Теперь, когда SWT был несколько старым, я хотел бы переключиться на Swing или JavaFX. И я хотел бы услышать ваши мысли о трех вещах.

Моя главная проблема заключается в том, что будет лучше для настольного GUI-приложения? (Я смотрел онлайн, и многие люди предполагают, что JavaFX так же хорош, как Swing, но я не видел много действительных аргументов, кроме простых пламенных войн). Он должен работать как на Windows, Mac, так и на некоторых популярных дистрибутивах Linux.

Что будет чище и проще в обслуживании?

и что будет быстрее строить с нуля?

Я использую методологию MVC в своем приложении, если это поможет.

Что будет чище и проще в обслуживании?

При прочих равных условиях, вероятно, JavaFX — API намного более согласован между компонентами. Однако это гораздо больше зависит от того, как написан код, а не от того, какая библиотека используется для его записи.

И что будет быстрее строить с нуля?

В значительной степени зависит от того, что вы строите. У Swing есть больше компонентов для него (сторонний, а также встроенный), и не все из них добрались до новой платформы JavaFX, поэтому может возникнуть определенное количество повторного создания колеса, если вам нужно что-то бит. С другой стороны, если вы хотите делать переходы/анимации/видеоматериалы, то это на порядок легче в FX.

Еще одна вещь, о которой нужно помнить, — это (возможно) внешний вид. Если вы абсолютно должны иметь внешний вид системы по умолчанию, тогда JavaFX (в настоящее время) не может этого предоставить. Не для меня большой размер (я предпочитаю, чтобы FX выглядел по-умолчанию), но я знаю, что некоторые политики требуют ограничения на стили системы.

Лично я вижу, что JavaFX — это «уже существующая» библиотека пользовательского интерфейса, которая еще не совсем там (но более чем годна к употреблению), и Swing в качестве библиотеки интерфейса границы с устаревшим интерфейсом, которая в настоящее время полностью поддерживается и поддерживается, но, вероятно, выиграла так будет в ближайшие годы (и, следовательно, вероятность того, что FX настигнет его в какой-то момент.)

Как заявлено Oracle, JavaFX является следующим шагом в их богатой клиентской стратегии на основе Java. Соответственно, это то, что я рекомендую для вашей ситуации:

Что было бы проще и чище поддерживать

  • JavaFX ввел несколько улучшений по сравнению с Swing, например, возможность разметки пользовательских интерфейсов с помощью FXML и тематику с помощью CSS. Он имеет большой потенциал для написания модульного, чистого и поддерживаемого кода.

Что будет быстрее строить с нуля

  • Это сильно зависит от ваших навыков и инструментов, которые вы используете.
    • Для качания различные IDE предлагают инструменты для быстрого развития. Лучшее, что я лично нашел, — это GUI-конструктор в NetBeans.
    • JavaFX также поддерживает различные IDE, хотя и не настолько зрелые, как поддержка Swing на данный момент. Однако его поддержка разметки в FXML и CSS делает разработку графического интерфейса на JavaFX более быстрой и интуитивно понятной.

Поддержка шаблонов MVC

  • JavaFX очень дружелюбен к шаблону MVC, и вы можете чисто отделить свою работу от: презентации (FXML, CSS), моделей (Java, объектов домена) и логики (Java).
  • IMHO, поддержка MVC в Swing не очень привлекательна. Поток, который вы увидите по различным компонентам, не соответствует последовательности.

Для получения дополнительной информации, пожалуйста, просмотрите эту часто задаваемую статью Oracle относительно JavaFX здесь.

Введение в Java FX


Что такое Java FX

JavaFX представляет инструментарий для создания кроссплатформенных графических приложений на платформе Java.

JavaFX позволяет создавать приложения с богатой насыщенной графикой благодаря использованию аппаратного ускорения графики и возможностей GPU.

С помощью JavaFX можно создавать программы для различных операционных систем: Windows, MacOS, Linux и для самых различных устройств: десктопы, смартфоны, планшеты, встроенные устройства, ТВ. Приложение на JavaFX будет работать везде, где установлена исполняемая среда Java (JRE).

JavaFX предоставляет большие возможности по сравнению с рядом других подобных платформ, в частности, по сравнению со Swing. Это и большой набор элементов управления, и возможности по работе с мультимедиа, двухмерной и трехмерной графикой, декларативный способ описания интерфейса с помощью языка разметки FXML, возможность стилизации интерфейса с помощью CSS, интеграция со Swing и многое другое.

История JavaFX фактически началась в первой половине 2000-х годов, когда разработчик по имени Крис Оливер (Chris Oliver), будучи работником компании SeeBeyond, разработал для создания графических интерфейсов новый язык F3 (Froms Follows Functions). Впоследствии в 2005 году SeeBeyond была приобретена компанией Sun Microsystems (которая на тот момент развивала язык Java до покупки компанией Oracle). F3 был переименован в JavaFX, а Крис Оливер продолжил работу над новой платформой уже в рамках компании Sun. И в мае 2007 года Sun Microsystems публично анонсировала новую платформу для создания графических приложений. А 4 декабря 2008 года вышел JavaFX 1.0 SDK.

После приобретения Sun Microsystems компанией Oracle в 2010 году была анонсирована, а в 2011 году вышла в релиз версия JavaFX 2.0. В первой версии JavaFX фактически представлял скиптовый язык. Во второй версии был полностью изменен подход. Скриптовый язык был убран, а платформа была полностью переписана фактически с нуля. Теперь создавать приложения можно было с помощью любого языка, который поддерживала JVM. Были добавлены новые API, интеграция со Swing и много других вещей.

Следующими важными вехами в развитии платформы стали версии JavaFX 8 и особенно JavaFX 9, которая вышла в сентябре 2020 года вместе с Java 9 и привнесла в платформу модульность. И если раньше JavaFX поставлялась вместе с Java SE, то сейчас JavaFX отделена от основной функциональности Java SE и используется как отдельный модуль. Последняя версия фреймворка — JavaFX 12 — вышла в марте 2020 года.

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

Установка инструментария

Что необходимо для работы с JavaFX? Прежде всего необходимо установить последнюю версию JDK с официального сайта Oracle: http://www.oracle.com/technetwork/java/javase/downloads/index.html. Желтельно установить также последнюю 12-ю версию Java, хотя, согласно документации, можно использовать и 11 JDK.

И даже после установки 12-й версии важно убедиться, что именно она и будет использоваться. В частности, системная переменная JAVA_HOME должна хранить путь к папке bin SDK 12-й версии.

Проверить, какая версия Java используется на глобальном уровне, можно выполнив в консоли/командной строке команду:

Если отображается 11 или более низшая версия, то необходимо просмотреть системные переменные среды, которые могут использовать другую версию java вместо java 12.

JavaFX SDK

Также необходимо загрузитьJavaFX SDK с адреса https://gluonhq.com/products/javafx/.

Например, если ос Windows, то соответственно надо загрузить JavaFX Windows SDK. По сути SDK представляет архив с файлами, и после его загрузки его необходимо распаковать в любое предпочтительное место на жестком диске. Например, в моем случае SDK распакован в папку C:\javafx-sdk .

Модули JavaFX

Если мы откроем папку lib в распакованном SDK, то мы увидим там модули, которые собственно и представляют JavaFX.

При написании кода приложений, а также при их компиляции и запуске мы будем использовать эти модули. Что они делают:

JavaFX vs Swing для кроссплатформенного десктопного приложения

Язык Java /

Основы языка Java

15 апр 2014 18:37

Я хочу создать кроссплатфомернное десктопное приложение, что-то типа приложения для хранения закладок на сайты. Или органайзера.

Насколько я знаю, раньше Swing считали лучшим решением, но недавно Джава 8 вышла, там свинг вообще не развили, зато JavaFX вполне прокачали и планируют дальше развивать. Может быть, стоит делать десктопное приложение на Java FX?

15 апр 2014 18:45

Да, стоит — собственно, об этом уж давно все говорят.


Правда если это делается только для себя и JavaFX знаешь хуже чем Swing, то может и не стоит.

А зачем его делать десктопным? Чтобы с работы им воспользоваться было нельзя? :)

15 апр 2014 19:25

Я знаю JavaFX хуже чем Swing, однако для меня не проблема изучить новую библиотеку. Тем более что свинг досканально НЕ изучал.

Не выбираю веб, потому что хочу моментальный поиск и скорость работы тоже моментальную.

Спасибо, буду тогда углубляться в JavaFX. Что посоветуете? Хотелось бы тогда поглубже его изучить.

15 апр 2014 20:23
15 апр 2014 21:56

Что может Swing (в джаве 8) такого, что не может JavaFX? Перечислите, а то вдруг это критично для моих приложений окажется.

И кто что думает на счёт SwingX и SwingLabs? Я видел демо, ОЧЕНЬ крутые библиотеки. А есть ли аналогичные для ДжаваФХ? или там из коробки всё робит?

Изменен:15 апр 2014 18:57
15 апр 2014 22:04

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

Вон хоть на Google Apps Engine захостите бесплатно — и будет что-то среднее между вебом и настольным приложением.

Swing-то и JavaFX тоже вполне можно тормозными сделать. Это уж смотря как писать. Стоит только забыть пул соединений с БД использовать — и у вас всё будет отлично тормозить даже с локальной базой — сами знаете. :)

По JavaFX я бы начал с официальных док и тюториалов на сайте оракла. Мне они казались внятными, хотя углубляться я сильно не стал.

И вот тоже непонятно — так ли надо десктопное приложение которым будете пользоваться вы сами — делать кросс-платформенным? Вы же будете юзать одну какую-то ОС. Так было бы быстрее нативное приложение!

А кстати, почему не андроид выбираете? Ведь вы вроде в нём изрядно продвинулись? По крайней мере телефон-то допустим всегда можно с собой носить и органайзер в нём держать.

JavaFX, Swing или Flex для Java Desktop Applications

Большая часть разработки настольных приложений, что я делаю это в свинге, и мне очень интересно услышать мнение людей об использовании JavaFX и / или Adobe Flex для создания настольных приложений. Вы имели успех создания настольных приложений с этим? Или вы бы придерживаться Свинг сейчас и использовать инструменты, чтобы сделать развитие свинг более продуктивным?

Если вы делаете на рабочем столе приложения, я бы придерживаться свинг. JavaFX / Flex / Silverlight будет более подходящим для RIA — богатых интернет-приложений. Хотя я бы утверждать, что ни один из них не был бы выбор в долгосрочной перспективе — смотрит на меня как HTML5 / CSS3 / Ajax выигрывают день, но тот довольно субъективная область. Но для настольных приложений — Я большой поклонник свинга (также Java Web Start очень недооцененные технологий)

Я бы сказал, что JavaFX можно рассматривать как своего рода расширение Качели с новым способом разработки графического интерфейса на Java с помощью декларативного языка программирования: JavaFX Script. код JavaFX Script выглядит точно так же, как JSON сценарий, в отличие от Adobe Flex или Microsoft Silverlight, который использует синтаксис XML.

JavaFX Script может взаимодействовать с Java и поэтому может вызывать компоненты Swing , легко. Это действительно новое поколение GUI API, как Свинг для AWT: хорошие графические компоненты, новые простые способы управления макетами, действительно хорошие возможности для построения динамических интерфейсов: переплеты, таймеры (для создания анимации) и т.д. Посмотрите здесь: http://www.javafx.com/samples/ и учебники и посмотреть , как быстро вы можете создать своего рода приложения Google Picasa . Этот API даже содержит некоторые инструменты , чтобы легко использовать веб — сервисы: вы можете найти множество образцов графический интерфейс , построенный в JavaFX связанно с некоторыми публичными веб — службами (как инструмент прогноза погоды).

А лучше всего . это развертывание части. Вы можете встроить приложение в HTML-странице, как апплет, и пользователь может перетащить приложение к ней / его рабочему столу, чтобы использовать его, когда он / она хочет (без возвращения в свой браузер)!

На самом деле, я думаю, JavaFX, на ранней стадии, хотя (v1.2), это действительно хороший инструмент, и представляет собой первый шаг на Java к следующему поколению приложений: в Rich Internet Applications (RIA).

Java Swing является признанной и зрелой технологией для разработки рабочего стола. Вы сможете найти много информации в Интернете и множество примеров программ. С учетом сказанного, однако, вы можете рассмотреть Adobe AIR. AIR в основном во время выполнения, что позволяет запускать приложения Flex на рабочем столе, и дает им доступ к локальным ресурсам, таким как файловая система. Я написал Swing-приложения Java в течение 10 лет, и я поражен тем, насколько продуктивнее я использую Flex / Adobe AIR. Один хороший аспект Flex является то, что вы можете создать свой ГПИ declaritively, так же, как, как вы используете HTML, чтобы объявить макет веб-страницы. Это гораздо более краткий способ указать графический интерфейс, и гораздо быстрее и проще в обслуживании, чем кипы кода приложений Java Swing вы должны сделать то же самое. Я бы не рекомендовал JavaFX, так как это так поздно к партии и hasn»

Записки программиста

Краткий обзор GUI-фреймворков для Java и мое первое простенькое GUI-приложение на Swing


Так исторически сложилось, что с UI мне приходилось работать очень мало. Видимо, поэтому мне так интересные всякие там Qt и wxW >

Ситуация с GUI фреймворками в мире Java несколько запутанная. Насколько я смог разобраться, дела обстоят следующим образом.

  • AWT (Abstract Window Toolkit) был первым GUI фреймворком. Идея была правильная — AWT использует нативные контролы, то есть, они выглядят и физически являются родными, независимо от того, где вы запускаете свое приложение. К сожалению, оказалось, что (1) общих для различных окружений контролов мало и (2) писать кроссплатформенные нативные интерфейсы так, чтобы ничего не поползло и не разъехалось, очень сложно;
  • Поэтому на смену AWT пришел Swing. Swing использует формочки, создаваемые AWT, на которых он своими силами рисует контролы. Работает это хозяйство, понятно дело, медленнее, но зато UI становится намного более портабельным. Swing предлагает на выбор программисту множество Look&Feel, благодаря которым можно сделать либо так, чтобы приложение выглядело и вело себя одинаково как под Windows, так и под Linux, либо чтобы приложение было очень похоже на нативное независимо от того, где его запускают. В первом случае приложение проще отлаживать, во втором — становятся счастливее пользователи. Кстати, изначально Swing был сделан парнями из Netscape;
  • SWT (Standard W >всех-всех-всех платформ, и тогда приложение вроде как даже станет портабельным, но только до тех пор, пока не появится какая-нибудь новая операционная система или архитектура процессора;
  • JavaFX активно пилится в Oracle и позиционируется, как скорая замена Swing. Идеологически JavaFX похож на Swing, то есть, контролы не нативные. Среди интересных особенностей JavaFX следует отметить хардверное ускорение, создание GUI при помощи CSS и XML (FXML), возможность использовать контролы JavaFX’а в Swing’е, а также кучу новых красивых контролов, в том числе для рисования диаграмм и 3D. Видео с более детальным обзором JavaFX можно посмотреть здесь. Начиная с Java 7, JavaFX является частью JRE/JDK;
  • NetBeans Platform (не путать с NetBeans IDE!) — это такая штука, которая, как я понял, работает поверх Swing и JavaFX, предоставляет как бы более удобный интерфейс для работы с ними, а также всякие дополнительные контролы. В одном приложении, использующем NetBeans Platform, я видел возможность перетаскивать вкладки drug&drop’ом, располагая панели в окне подобно тому, как это делают тайловые оконные менеджеры. По всей видимости, сам Swing так не умеет. Почитать про NetBeans Platform поподробнее можно здесь;

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

Выше что-то говорилось про какие-то там Look&Feel. Чтобы лучше понять, о чем идет речь, давайте напишем программу, которая выводит список этих самых Look&Feel и позволит переключаться между ними прямо в процессе работы программы.

Наше приложение будет выглядеть следующим образом под Ubuntu:

А так оно будет выглядеть при запуске под Windows:

Как видите, JRE под Windows и Linux включают в себя разный набор L&F. Кроме того, вы можете подключить сторонний Look&Feel или даже написать свой. По умолчанию используется L&F Metal, который во всех ОС и оконных менеджерах выглядит более-менее одинаково. Если вам больше нравятся круглые кнопочки, то вместо Metal можно использовать Look&Feel Nimbus. Если вам хочется, чтобы приложение было похоже на нативное, то под Linux следует выбрать L&F GTK+ (интересно, а если пользователь сидит под KDE?), а под Windows — L&F Windows. Неплохой идеей, видимо, будет предусмотреть в вашей программе возможность переключаться между различными L&F. С другой стороны, при этом придется тестировать работу приложения со всеми этими L&F.

Давайте посмотрим на исходный код приложения. Коллеги UI-щики заверили меня, что никаких WYSIWYG редакторов они не используют, а если используют, то разве что для быстрого прототипирования. Из неплохих WYSIWYG редакторов назывался JFormDesigner. Говорят, генерируемый им код даже похож на код, написанный человеком, а не адовую().последовательность().вызовов().методов(). В общем, весь код писался лапками в IntelliJ IDEA.

В Swing и AWT, если мы хотим что-то поменять в UI, мы должны делать это из event dispatching thread. Статический метод invokeLater принимает класс, реализующий интерфейс Runnable, и вызывает его метод run() внутри event dispatching thread. Если вам не знаком приведенный выше синтаксис, то это такой способ в Java объявить класс, не присваивая ему имени. Классы без имени называются анонимными. Часто анонимные классы в Java выполняют ту же роль, что играют лямда-фукнции в функциональных языках программирования. Помимо прочего, поддерживаются и замыкания. Интересно, что, в отличие от лямбд, анонимные классы в Java позволяют передать сразу пачку методов. Притом, при помощи наследования и абстрактных классов, для всех или части методов можно взять их реализацию по умолчанию.

Аннотация @Override проверяет, что метод run() действительно переопределит метод интерфейса Runnable. Без нее при переопределении метода мы можем случайно сделать опечатку и определить новый метод вместо того, чтобы переопределить существующий. Впрочем, в данном конкретном случае аннотация, видимо, не очень полезна, и, наверное, даже является лишней.

В итоге event dispatching thread вызовет метод createGUI(), полный код которого следующий:

private static void createGUI ( ) <
JList String > list = new JList <> ( ) ;
list. setSelectionMode ( ListSelectionModel . SINGLE_SELECTION ) ;

JScrollPane listScrollPane = new JScrollPane ( list ) ;

JPanel topPanel = new JPanel ( ) ;
topPanel. setLayout ( new BorderLayout ( ) ) ;
topPanel. add ( listScrollPane, BorderLayout . CENTER ) ;

ActionListener updateButtonListener = new UpdateListAction ( list ) ;
updateButtonListener. actionPerformed (
new ActionEvent ( list, ActionEvent . ACTION_PERFORMED , null )
) ;

JButton updateListButton = new JButton ( «Update list» ) ;
JButton updateLookAndFeelButton = new JButton ( «Update Look&Feel» ) ;

JPanel btnPannel = new JPanel ( ) ;
btnPannel. setLayout ( new BoxLayout ( btnPannel, BoxLayout . LINE_AXIS ) ) ;
btnPannel. add ( updateListButton ) ;
btnPannel. add ( Box . createHorizontalStrut ( 5 ) ) ;
btnPannel. add ( updateLookAndFeelButton ) ;

JPanel bottomPanel = new JPanel ( ) ;
bottomPanel. add ( btnPannel ) ;

JPanel panel = new JPanel ( ) ;
panel. setBorder ( BorderFactory . createEmptyBorder ( 5 , 5 , 5 , 5 ) ) ;
panel. setLayout ( new BorderLayout ( ) ) ;
panel. add ( topPanel, BorderLayout . CENTER ) ;
panel. add ( bottomPanel, BorderLayout . SOUTH ) ;

JFrame frame = new JFrame ( «Look&Feel Switcher» ) ;
frame. setMinimumSize ( new Dimension ( 300 , 200 ) ) ;
frame. setDefaultCloseOperation ( WindowConstants . EXIT_ON_CLOSE ) ;
frame. add ( panel ) ;
frame. pack ( ) ;
frame. setVisible ( true ) ;

updateListButton. addActionListener ( updateButtonListener ) ;
updateLookAndFeelButton. addActionListener (
new UpdateLookAndFeelAction ( frame, list )
) ;
>

Тут, в общем-то, нет ничего супер сложного. Создаются кнопки, список, список заворачивается в JScrollPane, чтобы у списка была прокрутка. Элементы управления располагаются во фрейме при помощи панелей. Панели могут иметь различные лайоуты, здесь мы использовали BorderLayout и BoxLayout. Принцип аналогичен тому, что используется в wxWidgets.

Для реакции на различные события, например, нажатия кнопок, используются классы, реализующие интерфейс ActionListener. В приведенном выше коде используется два таких класса — UpdateListAction и UpdateLookAndFeelAction. Как нетрудно догадаться по названию, первый класс отвечает за обработку нажатий на левую кнопку «Update list», второй — на правую кнопку «Update Look&Feel». ActionListener’ы привязываются к кнопкам при помощи метода addActionListener. Поскольку сразу после запуска приложения нам хочется увидеть список доступных Look&Feel, мы эмулируем нажатие на кнопку «Update list». Для этого мы создаем экземпляр класса ActionEvent и передаем его в качестве аргумента методу actionPerformed класса UpdateListAction.

Реализация класса UpdateListAction следующая:

static class UpdateListAction implements ActionListener <
private JList String > list ;

public UpdateListAction ( JList String > list ) <
this . list = list ;
>


@Override
public void actionPerformed ( ActionEvent event ) <
ArrayList String > lookAndFeelList = new ArrayList <> ( ) ;
UIManager. LookAndFeelInfo [ ] infoArray =
UIManager . getInstalledLookAndFeels ( ) ;
int lookAndFeelIndex = 0 ;
int currentLookAndFeelIndex = 0 ;
String currentLookAndFeel >=
UIManager . getLookAndFeel ( ) . getClass ( ) . getName ( ) ;

for ( UIManager. LookAndFeelInfo info : infoArray ) <
if ( info. getClassName ( ) . equals ( currentLookAndFeel >) ) <
currentLookAndFeelIndex = lookAndFeelIndex ;
>
lookAndFeelList. add ( info. getName ( ) ) ;
lookAndFeelIndex ++;
>

String [ ] listDataArray = new String [ lookAndFeelList. size ( ) ] ;
final String [ ] newListData =
lookAndFeelList. toArray ( listDataArray ) ;
final int newSelectedIndex = currentLookAndFeelIndex ;

SwingUtilities . invokeLater ( new Runnable ( ) <
@Override
public void run ( ) <
list. setListData ( newListData ) ;
list. setSelectedIndex ( newSelectedIndex ) ;
>
> ) ;
>
>

В конструкторе передается указатель на список, в котором мы будет отображать доступные Look&Feel. На самом деле, поскольку UpdateListAction является вложенным классом нашего основного класса LookAndFeelSwitcher, у него есть возможность обращаться напрямую к полям создавшего его экземпляра LookAndFeelSwitcher. Но функциональщик внутри меня сопротивляется такому подходу, поэтому я решил передать ссылку на список явно через конструктор.

Метод actionPerformed будет вызываться при нажатии на кнопку. Код этого метода довольно тривиален — мы просто используем статические методы класса UIManager для получения списка доступных Look&Feel, а также определения текущего Look&Feel. Затем обновляется содержимое списка и выбранный в нем элемент. Тут нужно обратить внимание на два момента. Во-первых, каждый Look&Feel имеет имя и имя класса, это разные вещи. Пользователю мы должны показывать имена, а при переключении Look&Feel использовать имя класса. Во-вторых, обратите внимание на то, как создаются final переменные newListData и newSelectedIndex, которые затем используются в анонимном классе. Это и есть тот самый аналог замыканий, речь о котором шла ранее. Очевидно, использование не final переменных в замыканиях привело бы к печальным последствиям.

Наконец, рассмотрим класс UpdateLookAndFeelAction:

static class UpdateLookAndFeelAction implements ActionListener <
private JList String > list ;
private JFrame rootFrame ;

public UpdateLookAndFeelAction ( JFrame frame, JList String > list ) <
this . rootFrame = frame ;
this . list = list ;
>

@Override
public void actionPerformed ( ActionEvent e ) <
String lookAndFeelName = list. getSelectedValue ( ) ;
UIManager. LookAndFeelInfo [ ] infoArray =
UIManager . getInstalledLookAndFeels ( ) ;

for ( UIManager. LookAndFeelInfo info : infoArray ) <
if ( info. getName ( ) . equals ( lookAndFeelName ) ) <
String message = «Look&feel was changed to » + lookAndFeelName ;
try <
UIManager . setLookAndFeel ( info. getClassName ( ) ) ;
SwingUtilities . updateComponentTreeUI ( rootFrame ) ;
> catch ( ClassNotFoundException e1 ) <
message = «Error: » + info. getClassName ( ) + » not found» ;
> catch ( InstantiationException e1 ) <
message = «Error: instantiation exception» ;
> catch ( IllegalAccessException e1 ) <
message = «Error: illegal access» ;
> catch ( UnsupportedLookAndFeelException e1 ) <
message = «Error: unsupported look and feel» ;
>
JOptionPane . showMessageDialog ( null , message ) ;
break ;
>
>
>
>

Здесь мы просто (1) находим L&F с именем, равным имени, выбранному в списке, (2) меняем L&F при помощи static метода setLookAndFeel класса UIManager и (3) перерисовываем главный фрейм нашего UI, а также, рекурсивно, расположенные на нем элементы, при помощи static метода updateComponentTreeUI класса SwingUtilities. Наконец, мы уведомляем пользователя при помощи сообщения, все ли прошло успешно.

Также хотелось бы сказать пару слов об отладке GUI-приложений на Java, и не только GUI. Во-первых, в Swing есть такое волшебное сочетание клавиш Ctr + Shift + F1, которое выводит в stdout информацию о том, как расположены контролы. Очень полезно, если хочется слизать UI у конкурентов. Во-вторых, есть такой интересный хоткей Ctr + \. Если нажать его в консоли работающего приложения на Java, будут выведены все нитки и их стектрейсы. Удобно, если вы словили дэдлок. Наконец, в-третьих, во время разработки GUI бывает полезно разукрасить панели в разные цвета. Сделать это можно так:

Код к этой заметке вы найдете здесь. Присмотритесь к нему повнимательнее. Как по мне, код получился не таким уж и многословным или там в стиле «фабрика фабрик для создания фабрик», как любят наговаривать на Java некоторые товарищи. В принципе, все довольно просто и понятно, и выкинуть из кода особо нечего. Вы как считаете?

10 Differences between JavaFX and Swing

JavaFX For Dummies

If you’re an experienced Java programmer, you have undoubtedly worked with Swing to create user interfaces. Oracle hasn’t completely abandoned Swing — it isn’t deprecated, and Swing applications continue to work. But no work is being done anymore to enhance Swing, and Oracle has made it clear that JavaFX is the future.

Here are ten basic differences between JavaFX and Swing.

In JavaFX, all the world’s a stage

In Swing, the >JFrame >JPanel class.

A Swing application is actually a >JFrame >JPanel and then add the panel to the frame.

JavaFX uses the metaphor of a theater to model the top-level containers of an application. A stage (defined by the Stage >Scene class). An application can have more than one scene, but only one of the scenes can be displayed on the stage at any given time.

A scene contains a scene graph, which is the most important concept in JavaFX. The scene graph is a collection of all the elements that make up a user interface — groups, layouts, controls, and shapes. These objects are called nodes and are all derived from the Node >Node >Node >setRotate method that allows you to rotate any node in the scene graph.

In JavaFX, layout managers are nodes

In Swing, a layout is associated with a JPanel . The top-level JPanel gives the basic layout for the frame. If you want to nest additional layouts within the top-level layout, you must create additional JPanels , set their associated layouts, and then add them to the higher-level layout.

In JavaFX, layouts are sub >Node class just like controls and shapes. Layouts contain a collection of nodes, and any node contained in a layout can be any kind of node: a control, a shape, or another layout. This scheme is much less cumbersome than Swing’s association of layouts with panels.

JavaFX has improved event handling

Both JavaFX and Swing use event handling to respond to user input events. However, you will find that events in JavaFX are better thought-out and more consistent than their equivalents in Swing. But the biggest reason event handling is improved in JavaFX is because of its reliance on properties.


JavaFX supports properties

JavaFX supports the concepts of properties and uses properties extensively throughout its classes. Simply put, a property is a variable whose value can be observed. You can register a listener with any property, allowing you to write code that’s triggered automatically whenever the property changes. In addition, you can bind properties to each other, meaning that if one property value changes, the other property value automatically changes with it.

Because nearly all characteristics of user-interface elements are managed through properties, JavaFX provides event handling that’s unheard of in Swing. For example, in JavaFX, you can attach an event listener to the color of a shape. If the shape changes color, your event listener code is executed. You may not have a use for the capability, but you can use it if you need to.

JavaFX is skinnable with CSS

One of the best features of JavaFX is that you can control formatting with Cascading Style Sheets (CSS). Just about every aspect of the appearance of your user interface can be set by a style rule, and you can easily allow the user to select which of several available style sheets to apply to the scene. Thus, you can change the entire appearance of your application with a single method call.

JavaFX has more consistent controls

In general, you’ll find that the JavaFX control hierarchy is more complete than Swing’s. Both have all the basic controls — buttons, check boxes, combo boxes, and the like. But JavaFX has several interesting controls that Swing doesn’t have, such as the collapsible TitledPane control and the Accordion control that arranges multiple TitledPane controls in a stack. And the fact that all these controls are skinnable by CSS gives them a huge advantage over Swing.

JavaFX has special effects

The javafx.scene.effect package contains a number of classes that can easily apply special effects to any node in the scene graph. These classes let you easily apply shadows, reflections, blurs, and other interesting visual effects that can transform the appearance of your user interface.

Animation is easier in JavaFX

Animation is possible in Swing, but Swing does not provide any direct support for it. To animate a Swing component, you must set up your own timers and build your own logic to perform the animation.

In contrast, JavaFX has built-in support for sophisticated animations that can be applied to any node in the scene graph. You can use one of several built-in transition >KeyFrame and Timeline classes to easily set up custom animations.

JavaFX supports modern touch devices

Swing lacks any support for modern touch devices. In contrast, JavaFX has built-in support for common touch gestures such as scrolling, swiping, rotating, and zooming. Handling these events in JavaFX is as easy as handling any other type of event: You simply install an event listener on the touch event and then write code that responds appropriately.

JavaFX has no equivalent to JOptionPane

It wouldn’t be fair to completely fill this list of ten differences with points that clearly favor JavaFX. Here’s one minor annoyance of JavaFX: It has no built-in equivalent to Swing’s JOptionpane class, which is very handy for displaying short alert messages or getting simple input from the user. In JavaFX, you have to craft your own equivalent to this useful class.

Java Swing vs Java FX

Difference Between Java Swing vs Java FX

When it comes to the Java ecosystem, Swing act as a toolkit for GUI widget. Swing is responsible for providing the APIs, for creating the user interface for Java programs. Before the advent of Swing, AWT i.e. Abstract Window Toolkit was responsible for providing an advanced form of user interface components. But Swing supersedes the AWT library and come up with a look and feel which resemble with most of the platform. These created UI components are not only advance in terms of appearance and feel, but they are also pluggable in nature. That means the underlying platform is not bounded with a specific set of UI components. UI components like buttons, labels, and checkbox can be easily created with Swing APIs. Thus, Swing is more flexible in nature than AWT.

Swing not just provide a designer with a regular UI component, but advanced components as well like tabbed panel, scroll panes, tables, trees etc. Swings have some added advantage over AWT, which makes Swing overtake AWT, in developing UI components. UI components in Swing are developed entirely in Java and thus they are platform independent, which is unlike AWT components. The framework adopted by Swing is MVC i.e. Model-view-controller, which provides an abstraction between the graphics UI and the underlying code structure. This abstraction helps the UI component writer in maintaining “separation of concern” like architecture. Any developer can have access to all available Swing classes with their complete documentation, in Java API guide. One classy aspect of Swing is its modular-based architecture because this writer can come up their own custom UI implementation of standard UI components, resulting in overriding the default implementation using Java inheritance concept.

Web development, programming languages, Software testing & others

JavaFX act as a standard GUI library, having an extensive support for desktop computer and different web browsers on a different operating system like Windows, Linux etc. Desktop applications can be created efficiently using JavaFX, which act as a software platform. In the earlier edition of JavaFX, scripts were being used to build JavaFX applications, these scripts were declarative and static in nature. But with the advent of JavaFX 2.0 version, it is implemented as Java library, means applications now can be written using native Java code instead of scripts. With JavaFX, Java developers can address all the issues which come along with modern UI design. A complex set of controls are required in the modern UI, the responsiveness of UI is highly dependent upon concurrency, but Java multi-threaded code requires a lot of boilerplate code addition.

All these challenges can be successfully meet with JavaFX, Sun’s strategy for providing Rich Internet Application makes the life of Java developer easier, which is in line with Adobe’s Flex and Microsoft’s Silver light tool. Flex and Silver light tool utilizes XML, a declarative language whereas JavaFX uses their own version of scripts. All Java developer who is well known with Swing APIs can easily confront JavaFX scripts and re-write their UI components, more versatile and internet rich application in nature. These JavaFX scripts not just include new APIs but also has access to all Java packages. A scene is created as a hierarchy of visual nodes and can be created with scene API, resulting graph scene can efficiently respond to the user interaction. Level of abstraction provided with APIs is efficient, and it provides all kind of automatic optimization. Any ordinary Java application can also utilize the scene graph APIs. JavaFX 8, has introduced some of the new features like 3D graphics support, rich text support, sensor support etc.

Head To Head Comparison Between Java Swing vs Java FX (Infographics)

Below is the top 6 difference between Java Swing vs Java FX

Key Differences between Java Swing vs Java FX

Both Java Swing vs Java FX performance are recommended options in the business. Let us examine some of the key difference between Java Swing vs Java FX

  1. Swing is the standard toolkit for Java developer in creating GUI whereas JavaFX provides a platform support for creating desktop applications.
  2. Swing has a more sophisticated set of GUI components whereas JavaFX has a decent number of UI components available but lesser than what Swing provides.
  3. Swing is a legacy library which fully features and provide the pluggable UI components whereas JavaFX has UI components which are still evolving with a more advanced look and feel.
  4. Swing can provide UI components with a decent look and feel whereas JavaFX can provide rich internet application having a modern UI.
  5. Swing related classes can be found in Java API guide with complete documentation whereas JavaFX doc is available in a various format with a comprehensive detailing and file support.
  6. Swing since its advent can create UI component using standard Java component classes whereas Java FX initially uses a declarative language called JavaFX script.
  7. Swing has a UI component library, and act as a legacy whereas JavaFX has several components built over Swing.
  8. Swing has support for MVC, but it is not consistent across component whereas JavaFX support is very friendly with MVC.
  9. Swing has various IDEs which offer a tool for rapid development whereas JavaFX has also support from various IDEs as well, but it is not as mature as Swing.
  10. A swing was renamed from Java Foundation Classes and sun microsystems announced it in the year 1997 whereas JavaFX was initially released in December 2008, by Sun microsystem and now acquired by Oracle.


Java Swing vs Java FX Comparison Table

Let’s look at the top Comparison between Java Swing vs Java FX –

Basis Of Comparison Between Java Swing vs Java FX

Java Swing Java FX
Components Swing has a number of components to it Less component as compared to legacy Swing APIs
User interface Standard UI components can be designed with Swing Rich GUI components can be created with advanced look and feel
Development Swing APIs are being used to write UI components JavaFX scripts and fast UI development with screen builder
Functionality No new functionality introduction for future JavaFX has a rich new toolkit, expected to grow in future
Category Legacy UI library fully featured Up and coming to feature rich UI components
MVC support MVC support across components lack consistency Friendly with MVC pattern

Conclusion – Java Swing vs Java FX

Богатые клиентские платформы против JavaFX 2 против Swing — java

Довольно скоро нам понадобится разработать графический интерфейс для создания конфигураций (скорее, скрипты, если честно) для нашего решения EAI на работе. Подумайте о типичном редакторе рабочих процессов. Визуализация фактических потоков, скорее всего, будет полностью настраиваемой задачей, будь то в Swing, SWT или JavaFX 2. У меня возникают проблемы с выбором: делать ли все остальное самостоятельно или использовать богатую клиентскую платформу.

В частности, я заметил, что JavaFX 2 получает много внимания и, похоже, действительно продвигается Oracle в качестве следующей большой вещи в ландшафте графического интерфейса Java. Демонстрации выглядят интересными, и, возможно, этот новый API более тесно ориентирован на производительность, а не на тонны шаблонов, которые Swing имеет тенденцию навязывать. Использование более новой технологии, которая получает большую поддержку, кажется безопасной ставкой для будущего обслуживания.

Использование RCP будет иметь определенные преимущества для этого проекта. Будем ли мы искать Eclipse или NetBeans в качестве платформы, имея существующие плагины/модули для просмотра базовой (XML) конфигурации, управления версиями и т.д., Предлагая мощную функциональность с минимальной работой. Мне также нравится идея иметь типы проектов нашего программного обеспечения рядом с проектами Java в том же графическом интерфейсе. Даже простые вещи, такие как управление окнами и настраиваемые панели, намного лучше обрабатываются RCP, что мы можем взломать.

Итак, вопрос в том, какая технология или их сочетание жизнеспособны? Мои параметры, насколько я могу видеть, таковы:

  • Eclipse. Я не слишком хочу использовать SWT, хотя, поскольку я больше знаком с Swing. NetBeans также является моей основной IDE, и я знаком с ней. Это всегда казалось более интуитивным.
  • NetBeans. Это позволяет разрабатывать пользовательские компоненты в Swing. Более низкая кривая обучения для меня.
  • NetBeans + JavaFX 2. Эта идея привлекает меня. Используйте NetBeans для обеспечения RCP и использования JavaFX 2 для пользовательских компонентов. JavaFX 2, по-видимому, интегрируется с Swing, но насколько хорошо это можно сделать в NetBeans?
  • Swing или JavaFX 2. Сделайте все GUI самостоятельно или используйте некоторые существующие рамки, чтобы получить большую часть того, что предлагает RCP. Это похоже на большую работу, но также обеспечивает превосходный контроль. Я немного ненавижу, чтобы попробовать это в Свинге. Насколько хорошо для этого подходит JavaFX 2?

В основном мой единственный графический интерфейс — это Swing на небольших приложениях. Это первый раз, когда я пойду за чем-то, что оправдывает RCP. Но JavaFX 2 — это путь вперед, и я не хочу пропустить эту лодку. Если Swing может оказаться на пути, я предпочел бы прыгать на новой технологии.

Если есть люди, которые могут поделиться своим опытом, попробовали что-то вроде NetBeans + JavaFX 2 или приблизились к авангарду JavaFX и могут рекомендовать/препятствовать его использованию для такого рода вещей, которые мне больше всего интересны.

Я понимаю это несколько открытый вопрос, но я не могу думать о более подходящем месте. Я не ищу «какой лучший RCP/является JavaFX лучше, чем Swing». Я ищу действительные баллы за/против их использования в этом контексте.

JavaFX уже нет смысла учить?

А есть ли смысл учить java? java ee выкинули, scene builder выкинули. javafx выкинут через пол года.

Может не стоит тратить на это время? Может лучше C# учить?

Учи Haxe, очень кроссплатформенный, можно писать десктопные приложения, игры на OpenFL которые будут работать на (практически)всех платформах, синтаксис практически полная копия Java, так же можно компилять его в C++, Java, C#,Lua,JS,Neko, Flash и вроде как PHP

А есть ли смысл учить java? java ee выкинули, scene builder выкинули. javafx выкинут через пол года.

Выкидывание упомянутых технологий из стандартной поставки Java никак не влияет на саму джаву. Это логичные шаги, чтобы облегчить базовую JRE. Обвязку (ЕЕ или Spring, к примеру), выбирает разработчик.

Так он может JRE и учит

JavaFX — это тупик хипстерства (движение такое на хайпе).

JFC/Swing будет всегда востребован.

Там с гуем пока все очень плохо. Особенно на .NET Core, где есть только вин 10 онли UWP, WPF на моно тоже нет. Остаются только биндинги ко всяким Qt и GTK.

javafx была мертворожденной с самого начала. её выкидывание ни на что не влияет. причём тут «учить java» не понятно, аля «Silverlight выкинули из винды, стоит ли использовать винду».

Только вот QT-5.9.4 со всеми модулями без документации и примеров у меня собралось из исходников примерно за 5 часов на шестиядерном Penom II X6 1055. А OpenJDK8 из исходников собирается примерно за 25 минут. Теперь представляешь масштабы заложенных в эти продукты знаний и заблуждений разработчиков?


винду использовать не стоит

А если без webkit’a?

Никто не знает, что он учит, с какой целью и учит ли вообще. Вроде три звезды, а пост вида «трололо».

Haxe что имеет в основе? Без браузера в кишках работает?

Написан на OCaml, не понял значения «в кишках», если подразумевалось работает ли без браузера OpenFL и прочие Библиотеки к нему, то да, я обычно Neko использую для OpenFL

учи python и pyqt

Уже 80% инди софта под вин, мак и линукс пишут на Electron (https://electronjs.org).

Вот это уже любопытно.

Получается это универсальный нативный тулкит (т.е. на клиенте свой язык) — а логика может быть написана на любом другом?

Лучше бы не писали.

Насчет логики не знаю, весь код обычно пишу на Haxe без использования других языков и сразу компилирую в Neko, но да, Haxe получается что работает практически везде

Уже 80% инди софта под вин, мак и линукс пишут на Electron

Куда катиться этот мир? Никто не знает адрес посольства параллельного мир без Electron?

А если серьёзно, то где почитать про 80%?

Лютый ты школьник, с NixOS и Haxe. К чему такому готовишься, о чем мы не знаем?

А будет ли интересно?

qt5-webkit-5.212.0.a2_5.txz — собирается 45 минут.

Всё вместе, если считать, начал собирать в 14:07 с qtchooser-39.txz и закончил пакетом qt5-5.9.4_1.txz в 20:04. Вся сборка происходила в отдельном окне терминала в автоматическом режиме после предварительного задания конфигурации всех собираемых пакетов в начале сборки. Итого: 6 часов на сборку QT-5.9.4 из исходников.

Уже без NixOS, но с Fedora Rawhide и Haxe, что ж плохого в Haxe?

хочу на работу устроится джунирором за еду. а на qt вакансий почти нет.

JavaFX — это тупик хипстерства (движение такое на хайпе).
JFC/Swing будет всегда востребован.

swing страшный. но он в стандартной поставке, я подумаю.
Просто так красиво выглядело, что можно писать на javafx десктопные приложения и через gluon для iphone, а тут оказывается javafx на помойку выкинут.

swing страшный. но он в стандартной поставке, я подумаю.

А если не использовать metal, а использовать native look&feel?

Не трать на это говно время, учи Go

Оно же тормозит и жрет память пуще джава

Наркоманы в треде. Хотя чего ещё ожидать от бсд фанбоев.

Объясни. Не понял высера.


Сравнивать сложность проектов по времени компиляции — это клиника.

Объясняю, он rustозависимый и как следствие убогость синтаксиса языка отражается на убогости мышления

Я не сложность сравниваю, а трудоёмкость сопровождения. Скорость подготовки прикладных программных систем напрямую зависит от скорости их компиляции: за одно и то же время можно либо 12 раз пересобрать OpenJDK8, либо всего один раз собрать QT5. То есть программы на Java быстрее компилируются, чем программы на C++ раз в десять (хотя в OpenJDK8 на C++ написана HotSpot JVM), и это автоматически распространяется на те вещи (приложения), что их используют. Высокая скорость компиляции нужна, чтобы сделать намного больше циклов «кодирование-компиляция-тестирование-правка» за одно и то же время в сравнении с таким тормозом прогресса, как LLVM/Rust, например.

за одно и то же время можно либо 12 раз пересобрать OpenJDK8, либо всего один раз собрать QT5

Зачем мне собирать Qt?

Высокая скорость компиляции нужна, чтобы сделать намного больше циклов «кодирование-компиляция-тестирование-правка» за одно и то же время

И зачем мне собирать Qt каждый раз?

Где пруфы? У меня при запуске всяких vscode жрёт не более 60 Мб.

Где пруфы? У меня при запуске всяких vscode жрёт не более 60 Мб.

А ведь технология казалась такой перспективной! Особенно, с восьмёрки — и работает даже на raspberry pi без иксов и встроенный вебкит и выглядит не как говно, да и жрёт не больше свинга.
Опять же, проперти тоже ничего так идея.

Release: JavaFX 2.2

Last Updated: October 2013

[+] Show/H style=’display:none;’>

About This Tutorial

1 The JavaFX Advantage for Swing Developers

2 Integrating JavaFX into Swing Applications

3 Enriching Swing Applications with JavaFX Functionality

4 Leveraging Applications with Media Features

5 Implementing a Swing Application in JavaFX

Application Files

View Source Code

Download Source Code

Profiles

Irina Fedortsova

Technical Writer, Oracle

Irina has written tutorials and technical articles on Java and JavaFX technologies. She lives in St. Petersburg, Russia. In her spare time, she enjoys swing dancing, playing piano, and reading.

We Welcome Your Comments

If you have questions about JavaFX, please go to the forum.


JavaFX for Swing Developers

2 Integrating JavaFX into Swing Applications

This chapter describes how to add JavaFX content into a Swing application and how to use threads correctly when both Swing and JavaFX content operate within a single application.

JavaFX SDK provides the JFXPanel class, which is located in the javafx.embed.swing package and enables you to embed JavaFX content into Swing applications.

Adding JavaFX Content to a Swing Component

For the purpose of this chapter, you create a JFrame component, add a JFXPanel object to it, and set the graphical scene of the JFXPanel component that contains JavaFX content.

As in any Swing application, you create the graphical user interface (GUI) on an event dispatch thread (EDT). Example 2-1 shows the initAndShowGUI method, which creates a JFrame component and adds a JFXPanel object to it. Creating an instance of the JFXPanel class implicitly starts the JavaFX runtime. After the GUI is created, call the initFX method to create the JavaFX scene on the JavaFX application thread.

Swing–JavaFX Interoperability and Threads

With JavaFX and Swing data coexisting in a single application, you may encounter the following interoperability situations:

A JavaFX data change is triggered by a change in Swing data.

A Swing data change is triggered by a change in JavaFX data.

Changing JavaFX Data in Response to a Change in Swing Data

JavaFX data should be accessed only on the JavaFX User thread. Whenever you must change JavaFX data, wrap your code into a Runnable object and call the Platform.runLater method as shown in Example 2-2.

Changing Swing Data in Response to a Change in JavaFX Data

Swing data should be changed only on the EDT. To ensure that your code is implemented on the EDT, wrap it into a Runnable object and call the SwingUtilities.invokeLater method as shown in Example 2-3.

Introducing the SimpleSwingBrowser Application

To see how Swing–JavaFX interoperability works, consider the SimpleSwingBrowser application. This is a Swing application with an integrated JavaFX component intended to view Web pages. You can type a URL in an address bar and view the page loaded in the application window. The SimpleSwingBrowser application window is shown in Figure 2-1.

Figure 2-1 The SimpleSwingBrowser Application Window

Initializing Swing Data

You can view the SimpleSwingBrowser.java file or download the SimpleSwingBrowser.zip file with a NetBeans project. Extract files from the zip file to a directory on your local file system and run the project in your Netbeans IDE.

As of version 7.2, the NetBeans >JavaFX category choose JavaFX in Swing Application .

To run this application from behind a firewall, you must specify proxy settings in order for the application to access a remote resource.

In the NetBeans >SimpleSwingBrowser project in the Projects window, select Properties , and in the Projects Properties dialog, select Run .

In the VM Options field, set the proxy in the following format:

The GUI of the SimpleSwingBrowser application is created on the EDT when the application starts. The main method is implemented as shown in Example 2-4.

The SimpleSwingBrowser class initializes Swing objects and calls the initComponents method to create the GUI as shown in Example 2-5.

The topmost window of this application is a JFrame object, which contains various Swing components such as a text field, a button, a progress bar, and a JFX panel intended to display JavaFX content.

Loading JavaFX Content

On the first run, the web page at http://oracle.com is loaded into a WebView object. As a new URL is entered in the address bar, the action listener, which is attached to the txtURL text field in the initComponents method, initiates the loading of a page as shown in Example 2-6.

JavaFX data should only be accessed on the JavaFX application thread. The loadURL method wraps the code into a Runnable object and calls the Platform.runLater method as shown in Example 2-7.

Updating Swing Data

As a new page is loaded into the WebView component, the title of the page is retrieved from the JavaFX data and passed to the Swing GUI to be placed on the application window as a title. This behavor is implemented in the createScene method as shown in Example 2-8.

Deploying Swing-JavaFX Applications

As of JavaFX 2.2, you can use the same deployment approach to package Swing-JavaFX applications that you would for pure JavaFX applications. Using JavaFX Ant tasks, you only need to set an attribute that the application’s primary UI toolkit is Swing. The resulting package provides support for the same set of execution modes as a package for a JavaFX application; in other words, the application can be run standalone, using Web Start, embedded into a web page, or distributed as a self-contained application bundle. For more information, see the Deploying JavaFX Applications guide.

Цукерберг рекомендует:  C# - Обработка Post запроса на c#
Понравилась статья? Поделиться с друзьями:
Все языки программирования для начинающих