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

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

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

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

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

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

6 ответов

Решение

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

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

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

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

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

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

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

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

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

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

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

Поддержка MVC Pattern

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

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

Никто не упомянул об этом, но JavaFX не компилируется и не работает на определенных архитектурах, которые Oracle считает "серверами" (например, Solaris), из-за отсутствия поддержки "jfxrt.jar". Придерживайтесь SWT, до дальнейшего уведомления.

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

Кроме того, SWT на самом деле новее и более активно поддерживается, чем Swing. (Первоначально он был разработан как замена Swing с использованием собственных компонентов).

На старых ноутбуках со встроенным видео приложение Swing запускается и работает намного быстрее, чем приложение JavaFX. Что касается разработки, я бы рекомендовал перейти на Scala - сопоставимое приложение Scala Swing содержит в 2,3 раза меньше кода, чем Java. Что касается Swing против SWT: графический интерфейс Netbeans значительно быстрее, чем Eclipse...

Я бы посмотрел вокруг, чтобы найти некоторые (сторонние?) Компоненты, которые делают то, что вы хотите. Мне пришлось создать пользовательские компоненты Swing для представления повестки дня, где вы можете забронировать несколько ресурсов, а также сетку в стиле Excel, которая хорошо работает с навигацией с помощью клавиатуры и так далее. У меня было ужасное время заставить их работать хорошо, потому что мне приходилось вникать во многие тонкости Swing всякий раз, когда я сталкивался с проблемой. Поведение мыши и фокусировки, а также многое другое может быть очень трудно понять, особенно для обычного пользователя Swing. Я хотел бы надеяться, что JavaFX немного более ориентирован на будущее и гладкий из коробки.

Другие вопросы по тегам