Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: GUI и Java FX приложения > достоинства и недостатки GUI тулкитов


Автор: zhz 15.2.2012, 10:46
Просьба знающих, написать основные достоинства и недостатки из имеющихся swt awt jface и swing. Можно конечно все это попробовать и тем самым узнать, но не хочется наступать на грабли, которые и так многими истоптаны. На данный момент сложилось впечатление:
awt довольно простой и имеет скудный набор компонентов. При этом , так сказать, есть везде. 
swing - основан на awt, больше всего чем в awt, но и сложнее.
swt вроде как пытались сделать собрав все хорошее из awt и swing, и убрав недостатки.
Но это все теория, неподтвержденная. А как дело выглядит на практике? В данной теме хотелось бы увидеть ключевые моменты, того или иного тулкита, которые впоследствии, помогли бы остальным определится с выбором.

Автор: Amp 15.2.2012, 12:57
Ключевое отличие Swing от SWT это то, что последний использует нативные элементы управления для заданных ОС. Swing отрисовывает виджеты сам, но при этом (если выставить соответствующий LaF) пытается делать это с применением системной темы. Стоит заметить, что выходит у него это так себе, поэтому приложения на Swing видны невооруженным глазом. JFace - MVC наслойка над SWT. Про AWT ничего сказать не могу. Можно еще вспомнить QtJambi, который находит в непонятном состоянии, и JavaFX. Но последний я бы не относил именно к GUI-тулкитам, там все шире. 

Автор: jk1 15.2.2012, 14:21
Цитата

Стоит заметить, что выходит у него это так себе, поэтому приложения на Swing видны невооруженным глазом.

Зато у него есть неплохие собственные скины, да еще с возможностью переопределить любую мелочь.

Цитата

awt довольно простой и имеет скудный набор компонентов.


И никто исключительно на нем уже давным-давно не пишет. Разве что вам повезет попасть на поддержку очень старого продукта. То есть если выбирать из пары AWT - Swing, то преимущество псоледнего сомнений не вызывает.

Автор: Amp 15.2.2012, 16:00
Цитата(jk1 @  15.2.2012,  14:21 Найти цитируемый пост)
Зато у него есть неплохие собственные скины, да еще с возможностью переопределить любую мелочь.

Под собственными подразумеваются те, что из коробки (nimbus, metal и т.п.) ?

Автор: jk1 15.2.2012, 16:36
Цитата

Под собственными подразумеваются те, что из коробки (nimbus, metal и т.п.) ? 


Из коробочных удобоварим в настройке только Nimbus, я в основном сторонние имел ввиду. 

Автор: zhz 16.2.2012, 04:40
Нашел сравнение тулкитов.  Перевел часть, пока не надоело. На качество не претендую, но как то так
AWT это оригинальный Java GUI тулкит. Его основное приемущество, в том , что он поставляется с каждой версией Java. Он очень стабилен. Это означает, что его не надо устанавливать отдельно, и он будет доступен везде, где сть JRE. AWT очень прост в использовании, но имеет ограниченный набор компонентов, layout менеджеров, и событий(events). При создании AWT, Sun делала упор на создание тулкита по технологии lowest-common denominator(LCD) (LCD это такой подход, при котором приложение должно запускаться на большинстве компьютеров, пусть даже в ущерб функциональности). В итоге, только компоненты, доступные для всех сред исполнения Java будут задействованы. Как результат, - и к сожалению,  некоторые широко используемые компоненты, такие как таблицы, деревья, прогрессбары и др. недоступны. Для приложений, требующих широкий набор компонентов, вам придется создавать их самому, что весьма трудоемко. Базовые компоненты представлены в пакеты java.awt.package. Замечательная особенность AWT, это то, что он поддерживает автоматическое удаление(disposal) компонентов. Это значит, что ВАм довольно редко придется делать это вручную. исключение: высокоуровневые компоненты, такие как диалоги, фрэймы. Компоненты AWT - потокобезопасны. 
Sun утверждает, что к Java применительо выражение "написал один раз, запускаешь везде и всегда"(WORE). Это значит , что Java код может быть написан и протестирован на одной машине(с Виндоус например), и следует ожидать что он запустится на любой другой, без предварительно тестирования. В большинстве случаев, это так, вот только AWT здесь является слабым звеном. ВВиду того, что AWT зависит от соответствующих ГУИ котнролов хоста(т.е например кнопка в AWT зависит от релизации кнопки в windows или linux), ГУИ будет выглядеть(и что более важно вести себя) различно, на различных хостах. Тем не менее, с помощью AWT можно создавать интерактивные приложения с дву- и трех мерной графикой.

 

Java Swing, так же известный как часть Java Foundation Classes, был попыткой избавится от недостатков AWT. В Swing, Sun реализовала хорошо спроектированный, гибкий, мощный ГУИ тулкит. К сожалению, это значит , что Swing требует достаточно времени для изучения, и местами излишне усложнен для определенных задач. Swing построен на AWT. Свинг (устал я языки переключать) использует модель событий , реализованную в АВТ, так же как и вспомогательные классы, такие как Colors, Images, Graphics. Компоненты, layout менеджеры, и события значительно расширяют имеющиеся в AWT, и идут в сравнение с SWt. Чтобы снизить различие в поведении на различных системах, Свинг минимизирует зависимость от компонентов той или иной системы. Многие компоненты эмулированы на чистой Java. Это значит что Свинг действительно кроссплатформен, и будет работать на большинстве систем. Таким образом свинг не будет выглядеть как нативные приложения в той или иной системе. В каждой системе он будет выглядеть по разному. Свинг может не позволить использовать приемущества хардварных ГУИ акселераторов и специфичные ГУИ операции. Тем самым Свинг работает медленнее, чем нативные гуи приложения. Сан уделяет этому большое внимание, и с каждой версией, все эти недостатки становятся все менее значимыми. Кодовая база Свинга довольно большая, это значит что он требует более  произвоительные машины для своей работы, чем скажем, АВТ и СВТ. 
Ключевые моменты Свинга:
1) Разделение модели от представления и контроллера.
Для все компонентов с моделями(кнопки, списки, таблицы, rich text  и тд.) модель отделена от компонентов. Это позволяет модели быть адаптированной для нужд приложения.
2)Программируемый LAF
реакция на события и внешний вид компонетов контролируется отдельными и динамически заменяемыми реализациями(LaF' ами).
3) Рендеры и редакторы.
Многие компонеты, отображающие "шаблонный" контент, такие как списки, таблицы и деревья, могут обрабатывать элементы различных типов.

Вообщем оригинал как и продолжение здесь
http://www.ibm.com/developerworks/grid/library/os-swingswt/

Если кому интересно, и сложно читать на английском, то могу перевести оставшуюся часть.


Автор: Skynin 16.2.2012, 09:48
Цитата

В данной теме хотелось бы увидеть ключевые моменты, того или иного тулкита, которые впоследствии, помогли бы остальным определится с выбором.

Различий порядочное количество. Поэтому бегло:

AWT практически не применяется. Разве что иногда в апплетах.
Является базой для:

Swing работает везде, но сонно. Зато написан в академическом ООП стиле. Но не всегда красиво выглядит, даже с LаFaми. Зато осваивается быстрее, и учебных материалов, примеров для него много. Входит в JRE а потому приложению не нужны дополнительные библиотеки. Что очень положительно для приложений рассчитанных для запуска через Java Web Start.

на SWT+JFace - интерфейсы работают быстро. Используют чуть больше памяти, требуют библиотек к приложению, причем не только с учетом ОСи, а и разрядности JVM. (для Java Web Start настроить можно, но тянуть клиенту библиотеку - придется)
Ощутимо более развиты, чем Swing: утрировано SWT+JFace = Swing+SwingX+JGoodies. 
Cамый навороченный RCP для Java приложений: Eclipse RCP, основан на SWT+JFace. (NetBeans RCP, на Swing'е, все же слабее, в нем меньше готовых для бизнес приложений пакетов. И хуже приспособлен для расширения, но это уже не связано с GUI библиотекой)
Но так как используются ресурсы ОСи, нужно быть аккуратным с их освобождением. Начинающему очень легко получить "SWTError: No more handles"
Документации на самом то деле тоже предостаточно, но сплошь на английском, и примеры не для студентов.
В отличие от Swing - развивается, совершенствуется и сейчас.

P.S.
Да, пара ссылок:
http://www.ibm.com/developerworks/ru/library/os-jface1/index.html
http://www.ibm.com/developerworks/ru/library/os-jface2/index.html

Автор: zhz 24.2.2012, 03:20
Skynin, Спасибо, информативно.
Нашел отличный источник примеров, будет очень полезен начинающим использовать SWT:  http://www.eclipse.org/swt/snippets/

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)