stringtranslate.com

Стандартный набор виджетов

Стандартный набор инструментов виджетов ( SWT ) — это набор инструментов графических виджетов для использования с платформой Java . Первоначально он был разработан Стивеном Нортовером из IBM и в настоящее время поддерживается Eclipse Foundation совместно с Eclipse IDE . Это альтернатива наборам инструментов Abstract Window Toolkit (AWT) и Swing Java для графического пользовательского интерфейса (GUI), предоставляемым Sun Microsystems как часть платформы Java Standard Edition (J2SE).

Для отображения элементов графического пользовательского интерфейса реализация SWT обращается к собственным библиотекам графического пользовательского интерфейса операционной системы с помощью собственного интерфейса Java (JNI) способом, аналогичным тем программам, которые написаны с использованием интерфейсов прикладного программирования (API) для конкретной операционной системы. Программы, вызывающие SWT, являются переносимыми, но реализация инструментария, несмотря на то, что часть его написана на Java , уникальна для каждой платформы.

Набор инструментов является бесплатным программным обеспечением с открытым исходным кодом, распространяемым по лицензии Eclipse Public License , одобренной Open Source Initiative . [1]

История

Первым набором инструментов Java GUI был Abstract Window Toolkit (AWT), представленный вместе с Java Development Kit (JDK) 1.0 как один из компонентов платформы Java Sun Microsystems. Исходный AWT представлял собой простую библиотеку Java-обертку для встроенных ( поставляемых операционной системой ) виджетов , таких как меню, окна и кнопки.

Swing — это набор инструментов для графического пользовательского интерфейса следующего поколения, представленный Sun в платформе Java Standard Edition (J2SE) 1.2. Swing был разработан для предоставления более богатого набора программных компонентов с графическим интерфейсом , чем AWT. Элементы Swing GUI полностью созданы на языке Java без собственного кода: вместо оболочки собственных компонентов GUI Swing рисует свои собственные компоненты, используя Java 2D для вызова подпрограмм рисования низкоуровневой операционной системы.

Корни SWT уходят в работу, которую Object Technology International (OTI) проделала в 1990-х годах при создании многоплатформенных, переносимых, собственных интерфейсов виджетов для Smalltalk , первоначально для OTI Smalltalk, который в 1993 году стал IBM Smalltalk. Уровень Common Widget IBM Smalltalk обеспечивал быстрый, собственный доступ к нескольким наборам виджетов платформы, в то же время предоставляя общий API без проблем с наименьшим общим знаменателем , типичных для других наборов инструментов портативного графического пользовательского интерфейса (GUI). IBM разрабатывала VisualAge , интегрированную среду разработки (IDE), написанную на Smalltalk. Они решили открыть исходный код проекта, что привело к разработке Eclipse , призванного конкурировать с другими IDE, такими как Microsoft Visual Studio . Eclipse написан на Java, и разработчики IBM, решив, что им нужен набор инструментов, который имел бы «собственный внешний вид » и «собственную производительность », создали SWT в качестве замены Swing. [2]

Дизайн

Демо-приложение для Linux

SWT — это оболочка объектов собственного кода, таких как объекты GTK , объекты Motif и т. д. Из-за этого виджеты SWT часто называются [ кем? ] как «тяжеловес», вызывая образы легкой оболочки Java вокруг «тяжелого» собственного объекта. В тех случаях, когда собственные библиотеки графического интерфейса платформы не поддерживают функциональные возможности, необходимые для SWT, SWT реализует собственный код графического интерфейса на Java, аналогично Swing. По сути, SWT представляет собой компромисс между производительностью и внешним видом AWT низкого уровня и простотой использования Swing на высоком уровне. [3] [4]

По данным Eclipse Foundation, «SWT и Swing — это разные инструменты, созданные с разными целями. Цель SWT — предоставить общий API для доступа к собственным виджетам на различных платформах. Основными целями проектирования являются высокая производительность, собственный внешний вид и глубокая интеграция с платформой. С другой стороны, Swing разработан таким образом, чтобы обеспечить настраиваемый внешний вид, общий для всех платформ». [5]

Это утверждалось [ кем? ] , что SWT имеет чистый дизайн, частично вдохновленный Эрихом Гаммой из известного шаблона дизайна . [6]

SWT — это более простой набор инструментов, чем Swing, с меньшим количеством (возможно) посторонних функций для среднего разработчика. [7] Это привело некоторых людей [ кто? ] , чтобы утверждать, что SWT не обладает функциональностью по сравнению с Swing. [8]

Джеймс Гослинг , создатель языка Java, утверждал, что SWT слишком прост и представляет собой сложный набор инструментов для переноса на новые платформы по той же причине, по которой когда-то у AWT были проблемы с портированием: он слишком прост, слишком низкоуровневый и слишком привязан к Win32 GUI API, что приводит к проблемам с адаптацией SWT API к другим наборам инструментов GUI, таким как Motif и OS X Carbon. [7]

Хотя SWT не реализует популярную архитектуру «модель-представление-контроллер » (MVC), используемую в Swing и многих других наборах инструментов графического пользовательского интерфейса высокого уровня, библиотека JFace , разработанная как часть того же проекта Eclipse, действительно обеспечивает кроссплатформенность . абстракция MVC более высокого уровня поверх SWT. Разработчики могут использовать JFace для предоставления более гибких и абстрактных моделей данных для сложных элементов управления SWT, таких как деревья, таблицы и списки, или для прямого доступа к этим элементам управления по мере необходимости.

Смотреть и чувствовать

То же демо-приложение на macOS

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

Поскольку SWT представляет собой просто оболочку собственного кода графического пользовательского интерфейса, он не требует большого количества обновлений при изменении этого собственного кода, при условии, что поставщики операционных систем стараются не нарушать работу клиентов своего API при обновлении операционных систем. Чего нельзя сказать о Swing, который поддерживает возможность изменять внешний вид работающего приложения с помощью «подключаемых интерфейсов». Они позволяют эмулировать собственный пользовательский интерфейс платформы с помощью тем , которые необходимо обновлять для отражения изменений графического интерфейса операционной системы, таких как темы или другие обновления внешнего вида.

SWT нацелен на «глубокую интеграцию платформы», отсылка Eclipse к использованию SWT собственных виджетов. По словам Мауро Мариниллиа из Developer.com, «всякий раз, когда требуется тесная интеграция с собственной платформой, SWT может быть плюсом». [9] Такая глубокая интеграция может быть полезна по-разному, например, позволяя SWT обертывать объекты ActiveX в Microsoft Windows .

Программирование

Простое приложение с графическим интерфейсом, использующее SWT и работающее в среде GTK .

Ниже приведена базовая программа Hello World , использующая SWT. Он показывает окно ( Shell ) и метку.

импортировать org.eclipse.swt.* ; импортировать org.eclipse.swt.widgets.* ;  общественный класс HelloWorld { public static void main ( String [] args ) { Display display = new Display (); Оболочка оболочки = новая оболочка ( отображение ); Метка метки = новая метка ( оболочка , SWT . NONE ) ; этикетка . setText ( «Привет, мир» ); этикетка . пакет (); оболочка . пакет (); оболочка . открыть (); while ( ! Shell . isDispose ()) { if ( ! display . readAndDispatch ()) display . спать (); } отображать . утилизировать (); } }                                      

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

Поддержка платформы

Vuze , клиент BitTorrent , использующий SWT

SWT необходимо портировать на каждую новую библиотеку графического интерфейса, нуждающуюся в поддержке. В отличие от Swing и AWT, SWT доступен не на каждой платформе, поддерживающей Java, поскольку SWT не является частью версии Java. Есть также некоторые свидетельства того, что производительность SWT на платформах, отличных от Windows, заметно менее эффективна. [8] Поскольку SWT использует разные собственные библиотеки для каждой платформы, программы SWT могут подвергаться ошибкам, специфичным для платформы.

SWT предоставляет программам больше деталей низкого уровня, чем Swing. Это связано с тем, что SWT технически представляет собой всего лишь слой над собственной библиотекой, обеспечивающей функциональность графического пользовательского интерфейса, и предоставление программисту доступа к собственному коду графического пользовательского интерфейса является частью замысла проекта SWT: «Его цель — не предоставить богатую среду разработки пользовательского интерфейса, а скорее возможный API пользовательского интерфейса, который может быть единообразно реализован на максимально возможном наборе платформ, сохраняя при этом достаточную функциональность для создания приложений с богатым графическим пользовательским интерфейсом (GUI). [10]

Поскольку реализация SWT различна для каждой платформы, библиотека SWT для конкретной платформы (файл JAR) должна распространяться с каждым приложением.

По состоянию на 2018 год SWT поддерживает следующие платформы и/или библиотеки графического интерфейса: [11]

По состоянию на март 2018 года SWT 4.7.3a (и 4.8M6) официально совместим со следующими операционными системами (графическая библиотека или аналогичные, если это явно требуется/процессоры): [13]

Пример приложения в Windows XP

Windows XP исторически поддерживалась, как и Linux на s390 , Solaris 11 (SPARCv9), Solaris 10 (x86_64), HP-UX (ia64), AIX (PPC и PPC64). [14]

Производительность

SWT был разработан как высокопроизводительный набор инструментов с графическим интерфейсом пользователя; быстрее, отзывчивее и потребляет меньше системных ресурсов, чем Swing. [15]

Были предприняты попытки сравнительного тестирования SWT и Swing, в результате которых был сделан вывод, что SWT должен быть более эффективным, чем Swing, хотя тестируемые в этом случае приложения не были достаточно сложными, чтобы сделать убедительные выводы для всех возможных применений SWT или Swing. [16] Довольно тщательный набор тестов показал, что ни Swing, ни SWT не превосходят друг друга в общем случае. [17]

Расширяемость и сравнение с другим кодом Java

Из-за использования собственного кода классы SWT не позволяют легко наследовать все классы виджетов, что, по мнению некоторых пользователей, может ухудшить расширяемость. [9] Это может затруднить настройку существующих виджетов с помощью SWT, чем если бы вы использовали Swing. [18] Оба инструментария поддерживают написание новых виджетов с использованием только кода Java, однако в SWT требуется дополнительная работа, чтобы новый виджет работал на каждой платформе. [18]

Виджеты SWT, в отличие от практически любого другого набора инструментов Java, требуют ручного освобождения объектов, в отличие от стандартной практики Java автоматической сборки мусора . Объекты SWT должны быть явно освобождены с использованием метода dispose, аналогичного методуfree . [19] Если этого не сделать, могут возникнуть утечки памяти или другое непредвиденное поведение. По этому поводу некоторые отметили, что «явное освобождение ресурсов может стать шагом назад во времени (и затратах), по крайней мере, для среднего разработчика Java» и что «это неоднозначное благо. Это означает больший контроль (и больше сложности) для разработчика SWT вместо большей автоматизации (и медлительности) при использовании Swing». [9] Необходимость ручного освобождения объектов при использовании SWT во многом обусловлена ​​использованием SWT собственных объектов. Эти объекты не отслеживаются Java JVM, поэтому она не может отслеживать, используются ли такие объекты, и, следовательно, не может собирать их мусор в подходящее время.

На практике единственные объекты SWT, которые программа должна явно удалять, — это подклассы Resource, такие как объекты Image, Color и Font. [ нужна цитата ]

Разработка

Ведутся некоторые разработки, позволяющие объединить Swing и SWT. Пытаются использовать два разных подхода:

Начиная с 2006 года существовал порт SWT-3.2 на язык программирования D под названием DWT. [22] С тех пор проект поддерживает 32-разрядную версию Windows и 32-разрядную версию Linux GTK для SWT-3.4. Проект DWT также имеет дополнительный пакет, содержащий порт JFace и Eclipse Forms. [23]

Поскольку JavaFX стал частью платформы Java SE, возник интерес к разработке серверной части для SWT, которая опирается на JavaFX аналогично тому, как SWTSwing опирается на Swing. Известным проектом, пытающимся достичь этого, был SWT на JavaFX , который стал частью e(fx)clipse в 2014 году. [24]

Использование

Приложения (отсортированные по алфавиту), использующие SWT, включают:

Недавние усилия сообщества Eclipse по созданию открытого исходного кода привели к портированию SWT (и JFace) в набор инструментов виджетов, подходящий для Интернета. Результатом стала платформа удаленных приложений Eclipse (RAP), которая сочетает в себе библиотеку qooxdoo Ajax с SWT API. Как и другие проекты Java Ajax (такие как Echo 2, Vaadin и Google Web Toolkit ), использование SWT API позволяет быстро разрабатывать приложения для Интернета практически так же, как и для настольных компьютеров.

Смотрите также

Примечания

  1. ^ Инициатива открытого исходного кода . «Лицензии по имени» . Проверено 24 марта 2007 г.
  2. ^ «Часто задаваемые вопросы: почему Eclipse использует SWT?» . Проверено 24 марта 2007 г.
  3. ^ Стив Нортовер. «SWT: Стратегия реализации для Java Natives» . Проверено 22 марта 2001 г.
  4. ^ Кэролин МакЛауд и Стив Нортовер. «SWT: Управление ресурсами операционной системы» . Проверено 27 ноября 2001 г.
  5. ^ «Часто задаваемые вопросы: SWT лучше, чем Swing?» . Проверено 16 февраля 2008 г.
  6. ^ Бен Гэлбрейт. «Введение в SWT» . Проверено 24 марта 2007 г.
  7. ^ АБ Элла Мортон. «Джеймс Гослинг: вопросы и ответы». Архивировано из оригинала 30 августа 2006 г. Проверено 24 марта 2007 г.
  8. ^ ab «Показатели производительности девяти языков» . Проверено 24 марта 2007 г.
  9. ^ abc Маринилли, Мауро. «Swing и SWT: история двух библиотек Java GUI» . Проверено 7 ноября 2006 г.
  10. ^ «Часто задаваемые вопросы: что такое SWT» . Эклипсепедия . eclipse.org . Проверено 16 октября 2009 г.
  11. ^ «4.8M6 — Загрузки проекта Eclipse» . download.eclipse.org . Проверено 1 мая 2018 г.
  12. ^ «Пользовательский интерфейс/тестирование платформы — Eclipsepedia» . wiki.eclipse.org . Проверено 1 мая 2018 г.
  13. ^ «4.7.3a - Загрузки проекта Eclipse» . download.eclipse.org . Архивировано из оригинала 16 апреля 2018 г.
  14. ^ «4.6.3 — Загрузка проекта Eclipse» . archive.eclipse.org . Проверено 1 мая 2018 г.
  15. Акан, Озгур (19 ноября 2004 г.). «Почему я выбираю SWT вместо Swing». Архивировано из оригинала 31 декабря 2006 года . Проверено 7 ноября 2006 г.
  16. ^ «Производительность Swing против SWT - взгляните на стеки вызовов» . Javalobby.org. 3 марта 2006 г. Архивировано из оригинала 17 сентября 2017 г. Проверено 16 октября 2009 г..
  17. ^ Игорь, Крижнар (10 мая 2005 г.). «Сравнение производительности SWT и Swing» (PDF) . cosylab.com. Архивировано из оригинала (PDF) 4 июля 2008 г. Проверено 24 мая 2008 г. Трудно дать эмпирическое правило, согласно которому SWT превзойдет Swing или наоборот. В некоторых средах (например, Windows) SWT является победителем. В других (Linux, VMware, хостинг Windows) Swing и его оптимизация перерисовки значительно превосходят SWT. Различия в производительности значительны: часто встречаются коэффициенты 2 и более в обе стороны..
  18. ^ ab «Создание собственных виджетов с помощью SWT». eclipse.org. 22 марта 2007 г. Проверено 13 декабря 2008 г. Создание подклассов может вызвать серьезные ошибки на системном уровне и сопряжено с риском утечки ресурсов (...) Создание подклассов Canvas или Composite — лучший способ гарантировать, что ваш виджет работает на всех платформах SWT (...) При создании подклассов для чего-либо, кроме Composite. или Canvas, вы должны переопределить метод protected void checkSubclass(), чтобы ничего не делать
  19. ^ Руководство для разработчиков Java по Eclipse, 2-е изд., стр. 359.
  20. ^ «SwingWT - API Swing/AWT через библиотеку SWT» . Swingwt.sourceforge.net . Проверено 16 октября 2009 г.
  21. ^ "Проект SWTSwing" . Swtswing.sourceforge.net . Проверено 16 октября 2009 г.
  22. ^ «DWT - порт SWT и его друзей на язык программирования D» . Dsource.org . Проверено 16 октября 2009 г.
  23. ^ «Формы затмения». Eclipse.org. 16 января 2005 г. Проверено 16 октября 2009 г.
  24. ^ «SWT на JavaFX теперь является частью e(fx)clipse» . 13 марта 2014 г.
  25. ^ «3T MongoChef теперь является Studio 3T» . 8 февраля 2017 г.

Рекомендации

Внешние ссылки