Рамки графического интерфейса Java. Что выбрать? Swing, SWT, AWT, SwingX, JGoodies, JavaFX, Apache Pivot?
Существует довольно много фреймворков gui для java, но что признано сегодня выбором выбора?
Следующее - это мое понимание различных фреймворков, пожалуйста, исправьте меня, если я ошибаюсь. Это очень слабо определенный набор вопросов, но я все же считаю его ценным для любого, кто думает о создании богатых приложений gui.
AWT
Является самой основой качания, она хорошо работает, но ей не хватает продвинутых компонентов. Если вы собираетесь создавать богатые приложения, AWT, вероятно, не подходит. Однако для небольших приложений gui, которые не требуют богатых пользовательских интерфейсов. Это может идеально сочетаться с проверенной и проверенной структурой.
Swing
На основе AWT, как указано выше. В раннем возрасте он считался медленным и искаженным и заставлял IBM создавать SWT для Eclipse. Однако с помощью Java 5 (или 6?) Swing стал основой выбора новых приложений. Swing имеет множество богатых компонентов, но в некоторых областях все еще не хватает. Одним из примеров является отсутствие полнофункционального компонента TreeTable, который может выполнять сортировку и фильтрацию/поиск.
SWT
Созданные IBM для Eclipse, они, казалось, думали, что Swing в то время не был подходящим для Eclipse. Сам по себе довольно низкий уровень, и он использует собственные виджеты платформы через JNI. Это не связано с Swing и AWT. Их API, однако, несколько неуклюжий и не интуитивный. У них есть некоторые продвинутые компоненты, такие как TreeTable. (но я не думаю, что они поддерживают сортировку и фильтрацию из коробки). SWT использует некоторые собственные привязки (через JNI?), А разглашение в Интернете заключается в том, что эта структура не должна использоваться в сегодняшних проектах. (почему бы и нет?)
SwingX
На основе Swing и его миссия - создавать богатые компоненты для качелей. Все еще находится в стадии разработки. (не очень активно, хотя.) Имейте очень хороший набор компонентов, например, TreeTable. Но TreeTable не поддерживает фильтрацию и сортировку, насколько я знаю. Тем не менее он поддерживает поиск с подсветкой.
Обратите внимание, что SwingX - это компоненты (AFAIU), которые являются расширениями или составы существующих компонентов Swing
JGoodies
Структура, о которой я ничего не знаю... Что это за сильные и слабые стороны? Что отличает Jgoodies от остальных?
JGoodies OTOH - это PLAF и макеты.
JavaFX
Последний флагман Java/Oracle. обещая быть факто стандартным при разработке богатых настольных или веб-приложений.
Apache Pivot
Он отображает пользовательский интерфейс с использованием Java2D, тем самым минимизируя влияние (IMO, раздутого) наследия Swing и AWT. (@Augustus Thoo)
Основное внимание, по-видимому, уделяется RIA (богатым интернет-приложениям), но, похоже, оно также может быть применено к настольным приложениям. И как личный комментарий, выглядит очень интересно! Мне особенно нравится проект Apache.
https://cwiki.apache.org/PIVOT/frequently-asked-questions-faq.html
Qt Jambi
Оболочка java для собственной qt-библиотеки, которая написана в c/С++. Очень мощный, широко используемый и принятый. Обладает большим количеством компонентов GUI и простым в использовании API.
http://qt-jambi.org/
Итак, чтобы попытаться кратко изложить то, что я спрашиваю:
Скажем, я хотел создать настольное приложение сегодня на Java, которое включает в себя множество продвинутых компонентов, что выбрать? И почему?
Какую из этих структур следует признать устаревшей и которая должна быть признана основой будущего?
Что такое сегодняшняя де-факто стандартная структура и какие инструменты вы используете для создания приложений java gui?
Я мог бы пожалеть об этом, но я все равно пробовал:
С#/. Говорят, что сеть имеет очень хороший набор простых в использовании компонентов, которые можно согнуть в любом направлении. И после изучения различных java-фреймворков в какой-то степени я не могу сказать то же самое о Java. Почему это? Почему java (который является наиболее широко используемым языком программирования в мире) имеет один и тот же набор компонентов GUI?
Это только то, что java основывает свои компоненты gui на гораздо более низком уровне, и можно написать все эти продвинутые компоненты, которые они ищут, но вам нужно сделать много, если не всю работу самостоятельно?
Ответы
Ответ 1
Дерево решений:
-
Рамки, такие как Qt и SWT, нуждаются в родных DLL. Поэтому вы должны спросить себя: поддерживаются ли все необходимые платформы? Можете ли вы упаковать родные библиотеки DLL с вашим приложением?
См. здесь, как это сделать для SWT.
Если у вас есть выбор здесь, вы должны предпочесть Qt над SWT. Qt был разработан людьми, которые понимают интерфейс и рабочий стол, в то время как SWT был разработан из необходимости ускорить работу Eclipse. Это скорее патч производительности для Java 1.4, чем интерфейс пользовательского интерфейса. Без JFace вам не хватает многих основных компонентов пользовательского интерфейса или очень важных функций компонентов пользовательского интерфейса (например, фильтрации на таблицах).
Если SWT отсутствует функция, которая вам нужна, структура несколько враждебна ее расширению. Например, вы не можете расширять в нем какой-либо класс (классы не являются окончательными, они просто бросают исключения, когда пакет this.getClass()
не является org.eclipse.swt
, и вы не можете добавлять новые классы в этот пакет, потому что он подпись).
-
Если вам нужно собственное, чистое Java-решение, которое оставит вас с остальными. Начните с AWT, Swing, SwingX - путь Swing.
AWT устарел. Свинг устарел (может быть, меньше, но не так много работы было сделано на Swing в течение последних 10 лет). Вы можете утверждать, что Swing был хорош для начала, но мы все знаем, что код гниет. И это особенно актуально для пользовательских интерфейсов сегодня.
Это оставляет вас с SwingX. После более длительного периода медленного прогресса, развитие снова поднялось. Главный недостаток Swing заключается в том, что он висит на некоторых старых идеях, которые очень напоминают кровотечение 15 лет назад, но которые сегодня ощущаются "неуклюжими". Например, представления таблиц поддерживают фильтрацию и сортировку, но вам все равно придется ее настроить. Вам нужно будет написать много кода котельной плиты, чтобы получить достойный пользовательский интерфейс, который чувствует себя современным.
Еще одна слабая область - тематика. На сегодняшний день существует множество тем. См. здесь для 10 лучших. Но некоторые из них медленные, некоторые из них ошибочны, некоторые из них неполны. Я ненавижу это, когда пишу пользовательский интерфейс, и пользователи жалуются, что что-то не работает для них, потому что они выбрали нечетную тему.
-
JGoodies - это еще один слой поверх Swing, например SwingX. Он пытается сделать Swing более приятным в использовании. Веб-сайт выглядит великолепно. Давайте посмотрим на учебник... hm... все еще ищут... держитесь. Кажется, что на веб-сайте вообще нет документации. Google для спасения. Нет, никаких полезных уроков вообще.
Я не уверен в структуре пользовательского интерфейса, которая так сильно пытается скрыть документацию от потенциальных новых поклонников. Это не значит, что JGoodies плохой; Я просто не мог найти ничего хорошего, чтобы сказать об этом, но это выглядит хорошо.
-
JavaFX. Отлично, стильно. Поддержка есть, но я чувствую, что это скорее блестящая игрушка, чем серьезная структура пользовательского интерфейса. Это чувство коренится в отсутствии сложных компонентов пользовательского интерфейса, таких как таблицы деревьев. Существует компонент веб-компонент, отображающий HTML.
Когда это было введено, моя первая мысль была "уже пять лет". Если ваша цель - хорошее приложение для телефонов или веб-сайтов, хорошо. Если ваша цель - профессиональное настольное приложение, убедитесь, что оно обеспечивает то, что вам нужно.
- Pivot
. Впервые я услышал об этом. Это в основном новый интерфейс пользовательского интерфейса на основе Java2D. Поэтому вчера я попробовал. Нет Swing, всего лишь маленький бит AWT (new Font(...)
).
Мое первое впечатление было приятным. Существует обширная документация, которая поможет вам начать работу. Большинство примеров приводятся с демонстрационными версиями в реальном времени (Примечание. В веб-браузере должна быть включена Java, что является угрозой безопасности) в Интернете страницу, чтобы вы могли видеть код и результирующее приложение бок о бок.
По моему опыту, больше усилий идет на код, чем на документацию. Посмотрев на документы Pivot, в код нужно было много усилий. Обратите внимание, что в настоящее время существует ошибка, которая мешает некоторым примерам работать (PIVOT-858) в вашем браузере.
Мое второе впечатление от Pivot заключается в том, что он прост в использовании. Когда я столкнулся с проблемой, я мог бы быстро решить ее, посмотрев пример. Мне не хватает ссылки на все стили, поддерживаемые каждым компонентом.
Как и в случае с JavaFX, он пропускает некоторые компоненты более высокого уровня, такие как компонент таблицы дерева (PIVOT-306). Я не пробовал ленивую загрузку со стола. Мое впечатление, что если базовая модель использует ленивую загрузку, то этого достаточно.
Перспективный. Если вы можете, попробуйте.
Ответ 2
SWT сам по себе довольно низкоуровневый, и он использует собственные виджеты платформы через JNI. Это не связано с Swing и AWT. Eclipse IDE и все богатые клиентские приложения на основе Eclipse, такие как Vuze BitTorrent клиент, создаются с использованием SWT. Кроме того, если вы разрабатываете плагины Eclipse, вы, как правило, используете SWT.
Я разрабатываю приложения на основе Eclipse и плагины уже почти 5 лет, поэтому я явно предвзято. Тем не менее, у меня также есть большой опыт работы с SWT и JFace UI toolkit, который построен поверх него. Я нашел JFace очень богатым и мощным; в некоторых случаях это может быть даже основной причиной выбора SWT. Он позволяет быстро взломать рабочий интерфейс, если он похож на IDE (с таблицами, деревьями, встроенными элементами управления и т.д.). Конечно, вы можете интегрировать свои собственные элементы управления, но это требует дополнительных усилий.
Ответ 3
Я хотел бы предложить другую структуру: Apache Pivot http://pivot.apache.org/.
Я попробовал это ненадолго и был впечатлен тем, что он может предложить в качестве платформы RIA (Rich Internet Application) ala Flash.
Он отображает пользовательский интерфейс с использованием Java2D, тем самым минимизируя влияние (IMO, раздутого) наследия Swing и AWT.
Ответ 4
Swing + SwingX + Miglayout - моя комбинация выбора. Miglayout намного проще, чем Swings воспринимал 200 различных менеджеров макетов и гораздо более мощный. Кроме того, он предоставляет вам возможность "отлаживать" ваши макеты, что особенно удобно при создании сложных макетов.
Ответ 5
Другой вариант - использовать Qt Jambi. Он имеет почти все величие Qt (многие компоненты, хорошая документация, проста в использовании), без хлопот С++. Я использовал его 3-4 года назад для небольшого проекта, даже тогда он был почти зрелым.
Вы можете посмотреть обсуждение Swing vs. Qt здесь.
Ответ 6
Мое личное мнение: Идите на Swing вместе с платформой NetBeans.
Если вам нужны расширенные компоненты (больше, чем предложения NetBeans), вы можете легко интегрировать SwingX без проблем (или JGoodies), поскольку платформа NetBeans полностью основана на Swing.
Я бы не стал запускать большое настольное приложение (или то, которое будет большим) без хорошей платформы, основанной на базовой структуре пользовательского интерфейса.
Другой вариант - SWT вместе с RCP Eclipse, но сложнее (хотя и не невозможно) интегрировать "чистые" компоненты Swing в такое приложение.
Кривая обучения немного крута для платформы NetBeans (хотя, я думаю, это верно и для Eclipse), но есть несколько хороших книг, вокруг которых я бы очень рекомендовал.
Ответ 7
вы забыли использовать Java Desktop Aplication на базе JSR296 как встроенную Swing Framework в NetBeans
исключая AWT и JavaFX, все ваши описываемые фреймворки основаны на Swing, если вы начнете с Swing, тогда вы поймете (ясно) все эти Swing (Based Frameworks)
ATW, SWT (Eclipse), Java Desktop Aplication (Netbeans), SwingX, JGoodies
все там фреймворки (я не знаю что-то больше о JGoodies), в т.ч. JavaFX не имеет большого времени на прогресс, много основанных на Swing Frameworks останавливаются, если не тогда без новейшей версии
просто мое мнение - лучшим из них является SwingX, но требуются самые глубокие знания о Swing,
Посмотрите и почувствуйте для Swing Based Frameworks
Ответ 8
Я был доволен Swing для настольных приложений, в которых я был вовлечен. Однако я действительно разделяю ваше мнение о Swing, не предлагающем передовые компоненты. То, что я делал в этих случаях, - это пойти на JIDE. Это не бесплатно, но не так дорого, и это дает вам гораздо больше инструментов под вашим поясом. В частности, они предлагают фильтруемую TreeTable.
Ответ 9
Я бы пошел с Свинг. Для макета я использовал бы форму JGoodies. Здесь стоит изучить белую бумагу на макете формы - http://www.jgoodies.com/freeware/forms/
Также, если вы собираетесь начать разработку огромного настольного приложения, вам определенно понадобится фреймворк. Другие указали на структуру netbeans. Мне это не понравилось, поэтому написал новый, который мы теперь используем в моей компании. Я положил его на sourceforge, но не нашел времени для его документирования. Здесь ссылка на просмотр кода:
http://swingobj.svn.sourceforge.net/viewvc/swingobj/
Витрина должна показать вам, как сделать простой вход в систему на самом деле.
Сообщите мне, если у вас есть какие-либо вопросы по этому вопросу, я мог бы помочь.