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

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

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

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

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

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

Ответ 1

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

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

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

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

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

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

Ответ 2

Как заявлено 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 здесь.

Ответ 3

Я использую javafx в первый раз в некоммерческом развлекательном приложении, и там все в порядке. У него нет качества продукции IMHO.

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

С другой стороны, есть приятные эффекты и дополнения, такие как HTMLEditor. Переключение языка приложения проще (просто перестройте сцену). В Java 8 javafx должен быть более pallatable (обратные вызовы) и созрел.

Если вы не можете ждать, пойдите для качания. Он прочный. Вы можете выбрать платформу RBC NetBeans, но это требует обучения или коммерческой поддержки. Усилия по переносу части платформы NetBeans на javafx, также в гибридной версии.

И последнее, но не менее важное: можно комбинировать оба, запускать javafx внутри приложения swing.


Добавление Вышеуказанный ответ был 22 мая 2013 года. В настоящее время JavaFX готов к производству.

Ответ 4

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

Ответ 5

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

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

Ответ 6

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

Ответ 7

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