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

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

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

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

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

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


person Quillion    schedule 22.05.2013    source источник
comment
JavaFX хорош, если вы начинаете с нуля. Также потому, что JavaFX официально заменяет Swing в качестве библиотеки пользовательского интерфейса Oracle для Java. Это не означает, что с Swing покончено. Это просто означает, что JavaFX будет привлекать гораздо больше внимания в каждом выпуске. С учетом сказанного уже есть полтора миллиона вопросов по этой теме на SO и в других местах в Google.   -  person nico_c    schedule 22.05.2013
comment
stackoverflow.com/questions/10587713/ Я также упомянул Google. Там уже много.   -  person nico_c    schedule 22.05.2013
comment
Хорошо, тогда предложение действительно похоже на fx, я оставлю это открытым, но, я думаю, приму ответ. Спасибо за ссылки.   -  person Quillion    schedule 22.05.2013
comment
Вот краткий обзор JavaFX, хотя любой из SWT, Swing или JavaFX подойдет для создания настольного приложения.   -  person jewelsea    schedule 23.05.2013
comment
Никто не упомянул об этом, но JavaFX не компилируется и не работает на определенных архитектурах, которые Oracle считает серверами (например, Solaris), из-за отсутствия поддержки jfxrt.jar.   -  person Malcolm Boekhoff    schedule 04.04.2014
comment
возможный дубликат фреймворков Java GUI. Что выбрать? Swing, SWT, AWT, SwingX, JGoodies, JavaFX, Apache Pivot?   -  person Oleg Estekhin    schedule 10.07.2014
comment
JavaFX Designer медленный, слишком медленный. Я не могу работать над своим дизайном, я вынужден писать дизайн, так как Netbeans зависает всякий раз, когда я добавляю кнопку с дизайнером. Swing делает хорошо, хотя никогда не было проблем с этим.   -  person Fortune    schedule 05.06.2015
comment
После нескольких месяцев работы с JavaFX, когда я оглядываюсь назад на свои проекты Swing из школы, они кажутся действительно устаревшими. Свойства и привязки гораздо более интуитивно понятны, чем слушатели в Swing. Отсутствие поддержки MDI для меня не было проблемой, по крайней мере, я предпочитаю вкладки. Стилизация с помощью css более управляема, чем установка и переопределение методов.   -  person Wesos de Queso    schedule 09.05.2017


Ответы (6)


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

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

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

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

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

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

person Michael Berry    schedule 22.05.2013
comment
Я полагаю, что все эти пункты применимы как к миру .NET, так и к миру графического пользовательского интерфейса рабочего стола, где Windows Presentation Foundation — это современный подход, направленный на замену старых Windows Forms, так что теоретически он лучше во всех аспектах, за исключением того, что он не будет (пока? но это были годы) поддержка родных общих элементов управления / внешнего вида оболочки, которые вы ожидаете, таких как простой диалог файлов / браузер каталогов / управление древовидным представлением. - person bitoolean; 02.05.2018

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

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

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

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

  • This is highly dependent on your skills and the tools you use.
    • For swing, various IDEs offer tools for rapid development. The best I personally found is the GUI builder in NetBeans.
    • JavaFX также поддерживается различными IDE, хотя и не настолько зрелой, как поддержка Swing на данный момент. Однако поддержка разметки в FXML и CSS делает разработку графического интерфейса на JavaFX интуитивно понятной.

Поддержка шаблонов MVC

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

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

person Yonathan W'Gebriel    schedule 17.02.2014

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

person Malcolm Boekhoff    schedule 04.04.2014
comment
@Quillion специально просит что-нибудь для создания настольного приложения, которое должно работать как на Windows, так и на Mac и некоторых популярных версиях Linux.. Так что, думаю, ему нет дела до Соляриса. - person Tim Büthe; 18.08.2014

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

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

person Russell Zahniser    schedule 22.05.2013
comment
SWT никогда не предназначался для замены Swing. Как же так? Swing поставляется вместе с Java от SUN, а SWT работает только на 4 или 5 платформах и изначально был разработан IBM и получил дальнейшее развитие в Eclispe Foundation. Если вообще можно сказать: SWT нацелен на замену AWT. - person Angel O'Sphere; 19.11.2013

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

person eriksensei    schedule 22.05.2013

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

person user2053898    schedule 08.09.2014
comment
Стоит упомянуть Scala Swing - person draw; 03.04.2016