10 Различий между JavaFX и Swing

10 Различий между JavaFX и Swing-dummies

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

Вот десять основных отличий между JavaFX и Swing.

В JavaFX весь этап в мире

В Swing класс, который содержит компоненты пользовательского интерфейса, называется фреймом и определяется классом JFrame. Кадр - это, по сути, пустое окно, в которое вы можете добавить панель , , которая служит в качестве контейнера для элементов пользовательского интерфейса. Панель определяется классом JPanel.

Приложение Swing на самом деле является классом, который расширяет класс JFrame. Чтобы отобразить компоненты пользовательского интерфейса, вы добавляете компоненты в JPanel, а затем добавляете панель в фрейм.

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

Сцена содержит граф сцены , , который является наиболее важной концепцией в JavaFX. Граф сцены - это совокупность всех элементов, составляющих пользовательский интерфейс - группы, макеты, элементы управления и формы. Эти объекты называются узлами и все они производятся из класса Node. Класс Node имеет много полезных функций и возможностей, которые автоматически становятся доступными для любого объекта, который вы можете добавить в свой пользовательский интерфейс. Например, класс Node определяет метод setRotate, который позволяет вращать любой узел в графе сцены.

В JavaFX менеджеры макетов - узлы

В Swing макет связан с JPanel. Верхний уровень JPanel дает базовый макет для фрейма. Если вы хотите вложить дополнительные макеты в макет верхнего уровня, вы должны создать дополнительные JPanels, установить соответствующие макеты, а затем добавить их в макет более высокого уровня.

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

JavaFX улучшил обработку событий

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

JavaFX поддерживает свойства

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

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

JavaFX - это скин с CSS

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

JavaFX имеет более последовательные элементы управления

В общем, вы обнаружите, что иерархия управления JavaFX более полная, чем Swing. Оба имеют все основные элементы управления - кнопки, флажки, комбинированные поля и т. П. Но у JavaFX есть несколько интересных элементов управления, которых нет в Swing, таких как складной элемент управления TitledPane и элемент управления Accordion, который упорядочивает несколько элементов управления TitledPane в стеке. И тот факт, что все эти элементы управления являются скинами CSS, дает им огромное преимущество перед Swing.

JavaFX имеет специальные эффекты

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

Анимация в JavaFX проще

Анимация возможна в Swing, но Swing не предоставляет никакой прямой поддержки для нее. Чтобы анимировать компонент Swing, вы должны настроить свои собственные таймеры и создать свою собственную логику для выполнения анимации.

Напротив, JavaFX имеет встроенную поддержку сложных анимаций, которые могут быть применены к любому узлу графика сцены. Вы можете использовать один из нескольких встроенных классов перехода для выполнения обычных анимаций, таких как затухания, вращения или движения.Или вы можете использовать классы KeyFrame и Timeline для простой настройки пользовательских анимаций.

JavaFX поддерживает современные сенсорные устройства

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

JavaFX не имеет эквивалента JOptionPane

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