В настоящее время существует два популярных инструментария для создания графических пользовательских интерфейсов в Java: Swing (от Sun) и Standard Widget Toolkit (SWT) (от IBM / Eclipse). У разных разработчиков часто бывают сильные мнения о том, что лучше, но на самом деле у них обоих есть свои сильные стороны.
свинг
Swing, часть Java Foundation Classes (JFC), впервые представленная в Java 2 (J2SE 1.2), является «официальной» (если хотите) платформой GUI для Java. Он встроен в настольную версию Java (J2SE). Подход Swing заключается в том, чтобы сделать компоненты пользовательского интерфейса (виджеты) максимально настраиваемыми и расширяемыми без ущерба для межплатформенной согласованности.
Для этого он избегает использования встроенных виджетов операционной системы и вместо этого использует чистый Java-код для рисования пользовательского интерфейса в пустых окнах и реагирования на события интерфейса.
Результатом этого является то, что все его компоненты полностью скины, и могут быть расширены с пользовательским внешним видом и поведением. Недостатком является то, что пользовательский интерфейс часто не совсем соответствует внешнему виду операционной системы (хотя Sun становится все лучше и лучше в этом). Кроме того, API может стать довольно сложным, как только вы захотите сделать что-то не совсем стандартное, из-за удивительной гибкости Swing.
Кроме того, из-за сложности Swing новичкам легко поступать «неправильно», создавая приложения, которые работают, но кажутся медленными или не реагируют на запросы пользователей.
Поскольку Swing встроен в Java, он идеально подходит для ситуаций, когда размер приложения должен быть минимальным, а межплатформенное развертывание должно быть полностью прозрачным. По этой причине Swing остается лучшим выбором для веб-разработчиков, которым необходимо создавать апплеты или приложения, запускаемые через Java Web Start .
SWT
С точки зрения разработчика приложений, SWT является гораздо более простым API для создания графических интерфейсов в Java. Вместо того чтобы избегать функций собственного пользовательского интерфейса операционной системы, он охватывает их, используя собственные виджеты для обеспечения оптимальной производительности и простоты кодирования. SWT был впервые разработан для использования в проекте Eclipse , но с тех пор разработчики использовали его для создания всевозможных настольных приложений.
Достоинства SWT очевидны: это простой API для написания, что означает, что вы можете быстрее получать впечатляющие результаты, а поскольку все виджеты обрабатываются собственной операционной системой, пользователи найдут интерфейс и поведение интерфейса полностью знакомыми. Также проще добиться хорошей производительности интерфейса (т.е. времени отклика) с помощью SWT.
В зависимости от типа разработки, которую вы делаете, недостатки SWT могут быть либо незначительными, либо нарушать условия сделки. Сложно и обычно нецелесообразно расширять виджеты SWT с помощью пользовательских функций. Поскольку SWT использует собственные функциональные возможности операционной системы, приложение SWT должно быть связано с собственными библиотеками, которые взаимодействуют с операционной системой, в которой будет выполняться программа. Это означает, что вам обычно придется распространять разные версии вашего приложения для Windows, Linux с GTK, Linux с Motif и Mac OS X. Из-за размера библиотек развертывание апплетов, использующих SWT, обычно нецелесообразно, и поддержка Java Web Start проблематична.
Свинг Ренессанс
Хотя какое-то время казалось, что Swing стоит на месте, в то время как SWT, новичок в этом блоке, привлек все внимание, Swing переживает ренессанс, поскольку любопытные разработчики изучают диапазон настройки и наглядность, которые могут быть реализованы с помощью компонентов Swing UI.
Вот несколько моих любимых примеров:
- Создание настраиваемого делегата пользовательского интерфейса для JTabbedPane
Внедряет «мини-вкладки» в стиле Adobe, демонстрируя, как легко изменить внешний вид виджета, не реализуя весь внешний вид. - Данные Советы
Более гладкая, чем в большинстве собственных реализаций, при наведении курсора мыши отображается полная метка для элемента списка, когда он обрезается по ширине списка. - Помогите своей полке (диалог ожидания для Swing)
Хотя этот пример немного бесполезен, в этом примере только поверхностно вид лакомого глаза, которого можно достичь, смешивая эффекты Java2D с компонентами Swing. - Качаем в 3D
Если только доказать, что ограничений нет, этот пример демонстрирует внешний вид Swing, который появляется в 3D при просмотре в 3D-очках!
Отличным местом для просмотра последних практических и не очень практичных экспериментов на Swing является блог на ClientJava.com .