Пользовательские виджеты

Если вам не хватает стандартного набора виджетов, можно реализовать пользовательский виджет. В SWT есть пакет org.eclipse.swt.custom, в котором содержатся пользовательские управляющие элементы, не входящие в основной набор SWT, но которые можно реализовать в рабочей среде.

Управляющий элемент
Назначение
CBanner Используется для макетирования области панелей инструментов и их включения/выключения.
CCombo Аналог Combo с поддержкой настройки вертикального размера для помещения в ячейки таблиц.
CLabel Подобен Label, но поддерживает эллиптическое обрезание текста и замену его многоточием. Также поддерживает эффект градиента для цвета фона, как показано в активной панели рабочей среды. Не поддерживает перенос.
CTabFolder Подобен TabFolder, но поддерживает дополнительную настройку внешнего вида вкладок (вверху или внизу) и рамок.
CTabItem Выбираемый объект пользовательского интерфейса, соответствующий вкладке страницы в CTabFolder.
SashForm Составной элемент управления, дочерние элементы которого располагаются в строку или в столбец и разделяются специальным значком Sash, с помощью которого пользователь может изменить их размеры.
ScrolledComposite Составной управляющий элемент с прокруткой и (необязательно) растягиванием содержимого на все доступное пространство.
StyledText Редактируемый управляющий элемент с возможностью ввода текста. Область текста внутри управляющего элемента можно обозначать разными цветами и разным стилем шрифта.
ViewForm Используется для размещения и настройки размера локальных меню, панелей инструментов и меток панели.

Реализация пользовательского виджета

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

Реализация внутреннего виджета

Если для вашего приложения нужен внутренний виджет, которого нет в наборе готовых элементов SWT, то его нужно реализовывать полностью. Это может быть виджет платформы, сторонний виджет или любой другой из общей библиотеки. В статье Creating Your Own Widgets using SWT приведен полный пример реализации внутреннего пользовательского виджета.

Совмещение существующих виджетов

Простые виджеты можно объединять в более сложные. Например, выпадающий список можно реализовать объединив текстовое поле, кнопку и список. Создание объединенного виджета состоит в создании класса, производного от Composite, и управлении управлении виджетами внутри него.

Простой пример можно найти в статье CCombo.

Самостоятельная реализация

Иногда за основу при реализации нового виджета взять нечего. Это значит, что новый виджет придется реализовывать полностью самостоятельно, создавая новый обработчик события Paint. Конечно, такой способ достаточно сложен, но и у него есть преимущества: в результате получится полностью переносимая реализация.

Пользовательские управляющие элементы реализуются путем наследования классов Canvas или Composite. Используйте Canvas если у вашего виджета не должно быть дочерних управляющих элементов.

Внутреннюю реализацию пользовательского виджета можно разбить на несколько основных задач:

По такому принципу реализованы многие управляющие элементы в org.eclipse.swt.custom. Простой пример можно найти в статье CLabel.

Дополнительная информация о пользовательских управляющих элементах приведена в статье Creating your own widgets using SWT.