Jump to content

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

Оригинальный автор(ы) Стивен Нортовер
Разработчик(и) Фонд Затмения
Первоначальный выпуск апрель 2003 г .; 21 год назад ( 2003-04 )
Стабильная версия
4.29 / 3 сентября 2023 г .; 10 месяцев назад ( 03.09.2023 )
Репозиторий
Написано в Ява
Операционная система Кросс-платформенный
Платформа Java-платформа
Доступно в Многоязычный
Тип Набор инструментов виджетов для платформы Java
Лицензия Затмение Публичное
Веб-сайт www .затмение .org / СВТ

Стандартный набор инструментов виджетов ( 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 имеет чистый дизайн, частично вдохновленный Эрихом Гаммой, известным в 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, таких как деревья, таблицы и списки, или для прямого доступа к этим элементам управления по мере необходимости.

Смотри и чувствуй

[ редактировать ]
То же демо-приложение на 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]

  • Microsoft Windows (x86 и x86_64)
  • Linux (GTK/PPC64 и PPC64LE)
  • macOS (Какао/x86_64)
Пример приложения в 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 метод, аналогичный методу C. языка 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)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. ^ Jump up to: а б Элла Мортон. «Джеймс Гослинг: вопросы и ответы» . Архивировано из оригинала 30 августа 2006 г. Проверено 24 марта 2007 г.
  8. ^ Jump up to: а б «Оценки производительности девяти языков» . Проверено 24 марта 2007 г.
  9. ^ Jump up to: а б с Маринилли, Мауро. «Swing и SWT: история двух библиотек Java GUI» . Проверено 7 ноября 2006 г.
  10. ^ «Часто задаваемые вопросы Что такое SWT» . Эклипсепедия . eclipse.org . Проверено 16 октября 2009 г.
  11. ^ «4.8M6 — Загрузки проекта Eclipse» . download.eclipse.org . Проверено 1 мая 2018 г.
  12. ^ «Пользовательский интерфейс/тестирование платформы — Эклипсепедия» . 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. ^ Jump up to: а б «Создание собственных виджетов с помощью 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 г.
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 719b152eab8174ef19cd312036802955__1708236120
URL1:https://arc.ask3.ru/arc/aa/71/55/719b152eab8174ef19cd312036802955.html
Заголовок, (Title) документа по адресу, URL1:
Standard Widget Toolkit - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)