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 как пограничная библиотека UI, которая полностью доступна и поддерживается на данный момент, но, вероятно, не будет так много в ближайшие годы (и, следовательно, вероятность того, что FX настигнет его в какой-то момент).

Как заявлено Oracle, JavaFX является следующим шагом в их богатой клиентской страtagsи на основе 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.

  • Часто задаваемые вопросы по JavaFX

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

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

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

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

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

  • iPhone: скрыть панель поиска UITableView по умолчанию
  • process.WaitForExit () асинхронно
  • Как реализовать перетаскиваемую вкладку с помощью Java Swing?
  • Алгоритм для выделения перекрывающихся прямоугольников?
  • Разница между validate (), revalidate () и invalidate () в графическом интерфейсе Swing
  • Сетка изображений внутри ScrollView
  • Создать редактор гитарных аккордов в WPF (из RichTextBox?)
  • Форматирование даты MM / DD / YYYY в текстовом поле в VBA
  • Создание пользовательской кнопки в Java с помощью JButton
  • установить и отключить иконки JToggleButton
  • Android ViewPager с нижними точками
  • Interesting Posts

    Использовать шрифт Awesome Icon в Placeholder

    Как подключить Bluetooth-устройства с помощью API BluetoothHeadset

    Как class может иметь свой собственный тип, это не бесконечная recursion?

    Как я могу всегда запускать командную строку как администратор?

    Бесплатная утилита для записи в NTFS на Mac OS X 10.6.5?

    Получение TypeError: __init __ () отсутствует 1 требуемый позиционный аргумент: ‘on_delete’ при попытке добавить родительскую таблицу после дочерней таблицы с записями

    Не удается смонтировать USB после небезопасного извлечения

    «ПРЕДУПРЕЖДЕНИЕ: предварительные заголовки отображаются» в отладчике Chrome

    Быстрый способ установки DevCon.exe?

    Swift, как сортировать массив настраиваемых объектов по значению свойства

    Параметрированный запрос для MySQL с C #

    Как проверить, поддерживает ли процессор набор инструкций SSE3?

    Java: лучший способ итерации через коллекцию (здесь ArrayList)

    SpeechRecognizer вызывает ANR … Мне нужна помощь с Android-речевым API

    Где в памяти строковые литералы? стек / куча?

    Давайте будем гением компьютера.