Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

Standard Widget Toolkit ( 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 был набор инструментов абстрактного окна (AWT), представленный вместе с Java Development Kit (JDK) 1.0 как один из компонентов платформы Java Sun Microsystems. Первоначальный AWT представлял собой простую библиотеку-оболочку Java для собственных ( поставляемых в операционной системе ) виджетов, таких как меню, окна и кнопки.

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

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

Дизайн [ править ]

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

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

Это было доказано [ кем? ], что SWT отличается чистым дизайном, отчасти вдохновленным Эрихом Гаммой из известности Design Patterns . [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, таких как деревья, таблицы и списки, или напрямую обращаться к этим элементам управления по мере необходимости.

Посмотрите и почувствуйте [ править ]

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

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

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

Программирование [ править ]

Простое приложение GUI с помощью SWT работает в GTK + среде

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

import  org.eclipse.swt. * ; import  org.eclipse.swt.widgets. * ;открытый  класс  HelloWorld  {  общедоступный  статический  void  main  ( String []  args )  {  Display  display  =  new  Display ();  Оболочка  оболочки  =  новая  оболочка ( отображение );  Метка  метки  =  новая  метка ( оболочка ,  SWT . НЕТ );  этикетка . setText ( "Привет, мир" );  этикетка . pack ();  ракушка. pack ();  оболочка . open ();  while  ( ! shell . isDisposed ())  {  if  ( ! display . readAndDispatch ())  display . сон ();  }  дисплей . dispose ();  } }

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

Поддержка платформы [ править ]

Vuze , клиент BitTorrent , который использует SWT, работающий в GTK + среде

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]

  • Windows : [12]
    • Win32
    • Windows Presentation Foundation (WPF), в разработке
  • Unix-подобный : Linux , FreeBSD :
    • GTK +
  • macOS :
    • Какао

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

  • Microsoft Windows (x86 и x86_64)
  • Linux (GTK + / PPC64 и PPC64LE)
  • macOS (Какао / x86_64)

Windows XP исторически поддерживается. Более старая версия дополнительно официально поддерживала 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метода, который является аналогом языка C «s free. [19] Если этого не сделать, это может привести к утечке памяти или другому непреднамеренному поведению. По этому поводу некоторые отметили, что «явное выделение ресурсов могло бы стать шагом назад во времени (и затратах) на разработку, по крайней мере, для среднего Java-разработчика» и что «это смешанное благо. Это означает больший контроль (и большая сложность) для SWT-разработчика вместо большей автоматизации (и медлительности) при использовании Swing ". [9] Необходимость в ручном освобождении объектов при использовании SWT в значительной степени связана с использованием SWT собственных объектов. Эти объекты не отслеживаются Java JVM, поэтому она не может отслеживать, используются ли такие объекты, и, следовательно, не может собрать их в подходящее время.

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

Развитие [ править ]

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

  • SwingWT - это проект, предлагающий альтернативную реализацию Swing. Он использует внутреннюю часть SWT для отображения своих виджетов, обеспечивая тем самым естественный внешний вид и преимущества SWT в производительности наряду с той же моделью программирования, что и Swing. [20]
  • SWTSwing - это проект, обеспечивающий серверную часть Swing для SWT. Фактически, SWT может запускаться с использованием собственных объектов Swing вместо, например, собственных объектов GTK или Windows. Это позволит SWT работать на всех платформах, поддерживаемых Swing. [21]

Начиная с 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) в 2014 году. [24]

Использует [ редактировать ]

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

  • Apache Directory Studio, браузер-редактор LDAP
  • BiglyBT, форк Vuze
  • Eclipse и его плагины
  • GumTree Platform, научный рабочий стол
  • Haystack , информационный менеджер
  • Продукты IBM Rational Software : Rational Application Developer , Rational Software Architect , Rational Team Concert и другие.
  • Программные продукты IBM Lotus : Notes , Sametime , Symphony и Expeditor
  • MongoChef, GUI- клиент для базы данных MongoDB
  • RSSOwl , агрегатор каналов
  • SmartGit, клиент Git , Mercurial и Apache Subversion (SVN)
  • TuxGuitar , редактор табулатур с открытым исходным кодом
  • uDig , инструмент ГИС
  • Вузе , ранее называвшийся Azureus

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

См. Также [ править ]

  • Список наборов инструментов для виджетов
  • Eclipse JFace , набор полезных сложных виджетов, основанных на SWT
  • Eclipse Nebula предоставляет некоторые дополнительные виджеты на основе SWT
  • OPAL некоторые дополнительные виджеты на основе SWT

Примечания [ править ]

  1. ^ Инициатива открытого исходного кода . «Лицензии по названию» . Проверено 24 марта 2007 .
  2. ^ "FAQ: Почему Eclipse использует SWT?" . Проверено 24 марта 2007 .
  3. ^ Стив Нортовер. «SWT: стратегия внедрения для Java Native» . Проверено 22 марта 2001 .
  4. ^ Кэролайн МакЛауд и Стив Нортовер. «SWT: Управление ресурсами операционной системы» . Проверено 27 ноября 2001 .
  5. ^ "Часто задаваемые вопросы: SWT лучше, чем Swing?" . Проверено 16 февраля 2008 .
  6. ^ Бен Гэлбрейт. «Введение в SWT» . Проверено 24 марта 2007 .
  7. ^ а б Элла Мортон. «Джеймс Гослинг, вопросы и ответы» . Архивировано из оригинала на 2006-08-30 . Проверено 24 марта 2007 .
  8. ^ а б «Тесты производительности девяти языков» . Проверено 24 марта 2007 .
  9. ^ a b c Маринилли, Мауро. «Swing и SWT: рассказ о двух библиотеках графического интерфейса пользователя Java» . Проверено 7 ноября 2006 .
  10. ^ «FAQ Что такое SWT» . Эклипсепедия . eclipse.org . Проверено 16 октября 2009 .
  11. ^ «4.8M6 - Загрузки проекта Eclipse» . download.eclipse.org . Проверено 1 мая 2018 .
  12. ^ «Пользовательский интерфейс платформы / Тестирование - Eclipsepedia» . wiki.eclipse.org . Проверено 1 мая 2018 .
  13. ^ http://download.eclipse.org/eclipse/downloads/drops4/R-4.7.3a-201803300640/
  14. ^ «4.6.3 - Загрузки проекта Eclipse» . archive.eclipse.org . Проверено 1 мая 2018 .
  15. Акан, Озгур (19 ноября 2004 г.). «Почему я выбираю SWT против Swing» . Архивировано из оригинала на 31 декабря 2006 года . Проверено 7 ноября 2006 .
  16. ^ «Swing vs. SWT Performance - Посмотрите на стеки вызовов» . Javalobby.org. 2006-03-03 . Проверено 16 октября 2009 ..
  17. ^ Игорь, Крижнар (2005-05-10). «Сравнение производительности SWT и Swing» (PDF) . cosylab.com. Архивировано из оригинального (PDF) 04.07.2008 . Проверено 24 мая 2008 . Трудно дать эмпирическое правило, в котором SWT превзойдет Swing или наоборот. В некоторых средах (например, Windows) SWT - лучший вариант. В других (Linux, VMware с Windows) Swing и его оптимизация перерисовки значительно превосходят SWT. Различия в производительности значительны: обычно бывает 2 и более в обоих направлениях. .
  18. ^ a b «Создание собственных виджетов с помощью SWT» . eclipse.org. 2007-03-22 . Проверено 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. 2005-01-16 . Проверено 16 октября 2009 .
  24. ^ "SWT на JavaFX теперь входит в состав клипа e (fx)" .

Ссылки [ править ]

  • Нортовер, Стив; Уилсон, Майк (8 июля 2004 г.). SWT: стандартный набор инструментов виджетов, том 1 . Эддисон-Уэсли . п. 592. ISBN. 0-321-25663-8.
  • Уорнер, Роб; Харрис, Роберт Л. (21 июня 2004 г.). Полное руководство по SWT и JFace . Апресс . п. 684. ISBN 1-59059-325-1. Архивировано из оригинала на 5 декабря 2010 года.
  • Клейберг, Эрик; Рубель, Дэн (1 апреля 2006 г.). Eclipse: Создание плагина коммерческого качества (2-е изд.). Эддисон-Уэсли Профессионал . п. 864 . ISBN 0-321-42672-X.
  • Гамма, Эрих; Бек, Кент (30 октября 2003 г.). Вклад в Eclipse . Эддисон-Уэсли . п. 416 . ISBN 0-321-20575-8.
  • Д'Анжу, Джим; Fairbrother, Скотт; Кен, Дэн; Маккарти, Пэт; Келлерман, Джон (5 ноября 2004 г.). Руководство для разработчиков Java по Eclipse (2-е изд.). Эддисон-Уэсли . п. 1136. ISBN 0-321-30502-7.
  • Мэтью Скарпино, Стивен Холдер, Стэнфорд Нг и Лоран Михалкович (28 ноября 2004 г.). SWT / JFace в действии . Мэннинг . п. 496. ISBN. 1-932394-27-3.CS1 maint: несколько имен: список авторов ( ссылка )

Внешние ссылки [ править ]

  • Официальный веб-сайт