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

195

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

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

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

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

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

Quillion
источник
23
JavaFX хорош, если вы начинаете с нуля. Кроме того, потому что JavaFX официально заменяет Swing как библиотеку пользовательского интерфейса Oracle для Java. Это не значит, что с Swing покончено. Это просто означает, что JavaFX будет получать гораздо больше внимания в каждом выпуске. С учетом вышесказанного, уже есть полтора миллиона вопросов на эту тему в SO и в других местах в Google.
nico_c
3
stackoverflow.com/questions/10587713/… Я также упомянул Google. Там уже много.
nico_c
Хорошо, тогда предложение действительно похоже на fx, я буду держать это открытым, но приму ответ, который я думаю. Спасибо за ссылки.
Quillion
1
Вот краткий обзор JavaFX, хотя любой из SWT, Swing или JavaFX будет работать для создания настольного приложения.
Jewelsea
Никто не упоминал об этом, но JavaFX не компилируется и не запускается на определенных архитектурах, которые Oracle считает «серверами» (например, Solaris), из-за отсутствующей поддержки «jfxrt.jar».
Малкольм Бекхофф

Ответы:

155

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

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

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

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

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

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

Майкл Берри
источник
1
Я полагаю, что все эти положения применимы и к миру .NET в мире настольных графических интерфейсов, где Windows Presentation Foundation - это современный подход, нацеленный на замену старых форм Windows Forms, поэтому он теоретически лучше во всех аспектах, за исключением того, что он не будет (пока? но это было годами) поддерживает родные общие элементы управления / внешний вид оболочки, которые вы ожидаете, такие как простой диалог файлов / директория браузера / древовидный элемент управления.
bitoolean
84

Как утверждает 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 здесь.

Йонатан В'Гебриэль
источник
14

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

Малкольм Бекхофф
источник
13
@Quillion специально просит что-то для создания настольного приложения, которое «должно работать как на Windows, Mac, так и на некоторых популярных версиях Linux». , Так что, думаю, ему нет дела до Соляриса.
Тим Бюте
5

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

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

Рассел Захнисер
источник
16
SWT никогда не предназначался для замены Swing. Как так? Swing поставляется с Java от SUN, а SWT работает только на 4 или 5 платформах, изначально поставляется от IBM и получил дальнейшее развитие в Eclispe Foundation. Если вообще можно сказать: SWT нацелена на замену AWT.
Ангел О'Сфера
0

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

eriksensei
источник
0

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

user2053898
источник
Стоит упомянуть Scala Swing
ничья