- •Обозначения и сокращения
- •Введение
- •1 Простое SWT приложение
- •1.1 Создание приложения
- •1.2 Запуск SWT программы из командной строки
- •1.3 Структура приложения
- •1.4 Слушатели событий
- •1.5 Работа с подпроцессами
- •1.5.1 Диспетчеризация внутренних событий
- •1.5.2 Нить пользовательского интерфейса SWT
- •1.5.3 Выполнение кода за пределами нити UI
- •1.5.4 Рабочая среда и нити
- •2 Элементы управления
- •2.1 Стандартные виджеты
- •2.2 Пользовательские виджеты
- •2.3 Класс Label
- •2.3.1 Стили
- •2.3.2 Текст
- •2.3.3 Изображение
- •2.3.4 Разделители
- •2.3.5 Выравнивание
- •2.3.6 Перенос слов текста
- •2.3.7 Пример использования этикеток
- •2.4 Класс Text
- •2.5 Класс Button
- •2.5.1 Стили
- •2.5.2 Текст
- •2.5.3 Изображение
- •2.5.4 Выравнивание
- •2.5.5 Push Button
- •2.5.6 Toggle Button
- •2.5.7 Check Box
- •2.5.8 Radio Button
- •2.5.9 Selection (выбор)
- •2.5.10 Указание используемой по умолчанию кнопки
- •2.6 Класс List
- •2.6.1 Стили
- •2.6.2. Добавление элементов в список
- •2.6.3. Удаление элементов из списка
- •2.6.4 Получение элементов списка
- •2.6.5 Настройка значений элементов
- •2.6.6 Поиск элементов
- •2.6.7 Выбор элементов списка
- •2.6.8 Обработка событий списка List
- •2.7 Класс Link
- •2.7.1 Стили
- •2.7.2. Текст
- •2.7.3. Обработчики событий
- •2.8 Класс Table
- •2.9 Класс TableColumn
- •2.10 Класс TableItem
- •2.11 Класс Item
- •2.12 Класс Combo
- •2.13 Класс FileDialog
- •2.14 Класс Menu
- •2.15 Класс MenuItem
- •2.16 Класс MessageBox
- •2.17 Класс TabFolder
- •2.18 Class TabItem
- •3 Макеты
- •3.1 Класс FillLayout
- •3.2 Класс GridLayout
- •3.3 Класс GridData
- •3.4 Класс RowLayout
- •3.5 Класс RowData
- •3.6 Класс FormLayout
- •3.7 Класс FormAttachment
- •3.8 Класс FormData
- •4 Графика
- •4.1 Класс GC
- •4.2 Класс Canvas
- •5 Пакет printing
- •5.1 Класс PrintDialog
- •5.2 Класс Printer
- •5.3 Класс PrinterData
- •6 Пакет events
- •6.1 Класс Event
- •7 Разработка приложений
- •8 Разработка новых компонент
- •9 Дополнительные возможности библиотеки SWG
- •9.1 Компоненты управления
- •9.2 Виджеты
- •9.3 Плоские формы
- •9.4 Линии, точки и ломанные
- •9.5 Класс PathShape
- •10 Анимация
- •10.1 Типы анимации
- •10.2 Анимация во времени
- •10. 3 Поддержка времени
- •10.4 Пример приложения с элементами анимации
- •Список использованных источников
2 Элементы управления
2.1 Стандартные виджеты
Управляющий элемент – это виджет, который можно создать и поместить где угодно в дереве предков/потомков. Базовый набор виджетов SWT определяется в пакете org.eclipse.swt.widgets. В приведенной ниже таблице 2.1 собраны конкретные типы элементов управления, входящих в этот пакет, и их назначение.
Таблица 2.1 – Состав пакета org.eclipse.swt.widgets
Виджет |
Назначение |
|
|
|
|
Browser |
Браузер. Управляющий элемент, содержащий исходную |
|
функцию вывода HTML |
||
|
||
|
|
|
Button |
Кнопка. Выбираемый управляющий элемент, отслеживающий |
|
нажатия и/или отпускания |
||
|
||
|
|
|
|
Холст. Составной элемент управления, представляющий собой |
|
Canvas |
поверхность для рисования. Часто используется для реализации |
|
|
пользовательских элементов управления |
|
|
|
|
Caret |
Текстовый курсор. Курсор, служащий точкой вставки текста |
|
|
|
|
|
Выпадающий список. Выбираемый элемент управления, |
|
Combo |
позволяющий пользователю выбрать строку из списка или |
|
(необязательно) ввести новую строку в предоставленное поле |
||
|
||
|
ввода |
|
|
|
|
Composite |
Составной элемент. Элемент управления, в котором могут |
|
содержаться другие виджеты |
||
|
||
|
|
|
CoolBar |
Панель Coolbar. Составной элемент управления, позволяющий |
|
динамически переносить элементы, расположенные в панели |
||
|
||
|
|
|
|
Элемент CoolItem. Выбираемый объект пользовательского |
|
CoolItem |
интерфейса, представляющий собой динамически изменяемую |
|
|
область панели Coolbar |
|
|
|
|
Group |
Группа. Составной элемент управления, группирующий другие |
|
виджеты и заключающий их в рамку и/или метку |
||
|
||
|
|
|
Label |
Метка. Элемент управления без возможности выбора, |
|
показывающий строку или изображение |
||
|
||
|
|
|
Link |
Ссылка. Выбираемый элемент управления, предназначенный |
|
для отображения текста со ссылками |
||
|
||
|
|
|
List |
Список. Выбираемый элемент управления, позволяющий |
|
|
|
28
|
выбрать строку или строки |
|
|
|||
|
|
|||||
Menu |
Меню. Объект пользовательского интерфейса, содержащий |
|||||
пункты меню |
|
|
|
|||
|
|
|
|
|||
|
|
|||||
MenuItem |
Пункт меню. Выбираемый объект пользовательского |
|||||
интерфейса |
|
|
|
|
||
|
|
|
|
|
||
|
|
|||||
ProgressBar |
Индикатор состояния. Управляющий элемент без возможности |
|||||
выбора, отображающий состояние. Обычно представлен в виде |
||||||
|
гистограммы |
|
|
|
|
|
|
|
|
|
|
|
|
|
Элемент |
Sash. |
Выбираемый |
элемент |
управления, |
|
Sash |
представляющий из себя линию, которую можно перетаскивать |
|||||
мышью в нужное место в пределах родительского окна. |
||||||
|
Используется для изменения размеров дочерних виджетов путем |
|||||
|
перемещения разделяющей их линии |
|
|
|||
|
|
|||||
Scale |
Линейка. Выбираемый элемент управления, представляющий |
|||||
собой ряд числовых значений |
|
|
||||
|
|
|
||||
|
|
|||||
ScrollBar |
Полоса прокрутки. Выбираемый элемент управления, |
|||||
представляющей собой ряд положительных чисел. Используется |
||||||
|
в элементе Composite со стилями V_SCROLL и/или H_SCROLL. |
|||||
|
|
|||||
|
Оболочка. Окно, управляемое системным администратором |
|||||
Shell |
окон. Элементы Shell могут порождаться либо элементом Display |
|||||
(shell верхнего уровня), либо другим элементом shell (вторичные |
||||||
|
||||||
|
shell) |
|
|
|
|
|
|
|
|||||
|
Ползунок. Выбираемый элемент управления, представляющий |
|||||
Slider |
собой ряд числовых значений. Ползунок отличается от линейки |
|||||
тем, что на нем есть курсор в виде руки, с помощью которого |
||||||
|
||||||
|
можно регулировать положение ползунка |
|
||||
|
|
|||||
Spinner |
Счётчик. Выбираемый элемент управления для ввода чисел |
|||||
|
|
|||||
TabFolder |
Папка закладок. Составной элемент управления, группирующий |
|||||
страницы, выбранные пользователем с помощью отмеченных |
||||||
|
закладок |
|
|
|
|
|
|
|
|
||||
TabItem |
Закладка. Выбираемый объект пользовательского |
интерфейса, |
||||
соответствующий странице в папке закладок |
|
|||||
|
|
|||||
|
|
|
|
|
|
|
Table |
Таблица. Выбираемый элемент управления, отображающий |
|||||
|
||||||
|
список табличных элементов, которые можно выбирать. |
|||||
|
Элементы представлены в строках, каждая из которых содержит |
|||||
|
|
|
|
|
|
29
|
несколько столбцов, представляющих различные аспекты |
||||||
|
элементов |
|
|
|
|
||
|
|
||||||
TableColumn |
Столбец таблицы. Выбираемый объект пользовательского |
||||||
|
интерфейса |
|
|
|
|
||
|
|
|
|
||||
TableItem |
Ячейка. |
Выбираемый |
объект пользовательского интерфейса, |
||||
представляющий собой элемент таблицы |
|
|
|||||
|
|
|
|||||
|
|
||||||
Text |
Текстовое поле. Редактируемый элемент управления для ввода |
||||||
текста |
|
|
|
|
|
||
|
|
|
|
|
|
||
|
|
|
|
|
|||
ToolBar |
Панель |
инструментов. Составной |
элемент |
управления, на |
|||
котором расположены выбираемые элементы управления панели |
|||||||
|
|||||||
|
|
|
|
|
|
||
ToolItem |
Элемент |
панели |
инструментов. |
Выбираемый |
объект |
||
пользовательского интерфейса |
|
|
|
||||
|
|
|
|
||||
|
|
||||||
Tracker |
Ограничивающая рамка. Объект пользовательского интерфейса, |
||||||
ограничивающий области растяжимой нити |
|
|
|||||
|
|
|
|||||
|
|
||||||
Tray |
Лоток. Представляет системный лоток, входящий в состав |
||||||
области состояния панели задач некоторых операционных |
|||||||
|
систем |
|
|
|
|
|
|
|
|
||||||
TrayItem |
Значок лотка. Выбираемый объект пользовательского |
||||||
интерфейса, представляющий элемент системного лотка |
|||||||
|
операционной системы |
|
|
|
|
||
|
|
||||||
Tree |
Дерево. Выбираемый элемент управления, отображающий |
||||||
иерархический список элементов дерева, которые можно |
|||||||
|
выбирать |
|
|
|
|
|
|
|
|
||||||
TreeColumn |
Раздел дерева. Выбираемый объект пользовательского |
||||||
|
интерфейса |
|
|
|
|
||
|
|
|
|
||||
TreeItem |
Элемент |
дерева. Выбираемый объект |
пользовательского |
||||
интерфейса |
|
|
|
|
|||
|
|
|
|
|
|||
|
|
|
|
|
|
|
2.2 Пользовательские виджеты
Если вам не хватает стандартного набора виджетов, можно создать заказной виджет. В SWT есть пакет org.eclipse.swt.custom (таблица 2.2), в
30
котором содержатся пользовательские управляющие элементы, не входящие в основной набор SWT, но которые можно реализовать в рабочей среде.
Таблица 2.2 – Состав пакета org.eclipse.swt.custom
Управляющий |
Назначение |
|
элемент |
||
|
||
CBanner |
Используется для макетирования области панелей |
|
инструментов и их включения/выключения |
||
|
||
CCombo |
Аналог Combo с поддержкой настройки вертикального |
|
размера для помещения в ячейки таблиц |
||
|
||
|
Подобен Label, но поддерживает эллиптическое обрезание |
|
CLabel |
текста и замену его многоточием. Также поддерживает |
|
эффект градиента для цвета фона, как показано в активной |
||
|
панели рабочей среды. Не поддерживает перенос |
|
|
Подобен TabFolder, но поддерживает дополнительную |
|
CTabFolder |
настройку внешнего вида вкладок (вверху или внизу) и |
|
|
рамок |
|
CTabItem |
Выбираемый объект пользовательского интерфейса, |
|
соответствующий вкладке страницы в CTabFolder |
||
|
||
|
Составной элемент управления, дочерние элементы |
|
SashForm |
которого располагаются в строку или в столбец и |
|
разделяются специальным значком Sash, с помощью |
||
|
которого пользователь может изменить их размеры |
|
|
Составной управляющий элемент с прокруткой и |
|
ScrolledComposite |
(необязательно) растягиванием содержимого на все |
|
|
доступное пространство |
|
|
Редактируемый управляющий элемент с возможностью |
|
StyledText |
ввода текста. Область текста внутри управляющего |
|
элемента можно обозначать разными цветами и разным |
||
|
стилем шрифта |
|
ViewForm |
Используется для размещения и настройки размера |
|
локальных меню, панелей инструментов и меток панели |
||
|
||
|
|
Реализация пользовательского виджета
После того, как определены цели и задачи виджета и принято решение о поддерживаемых платформах, следует продумать несколько вариантов его реализации. Эти способы можно применять как вместе, так и по отдельности, в зависимости от операционной системы.
Реализация внутреннего виджета
31
Если для вашего приложения нужен внутренний виджет, которого нет в наборе готовых элементов SWT, то его нужно реализовывать полностью. Это может быть виджет платформы, сторонний виджет или любой другой из общей библиотеки.
Совмещение существующих виджетов
Простые виджеты можно объединять в более сложные. Например, выпадающий список можно реализовать объединив текстовое поле, кнопку и список. Создание объединенного виджета состоит в создании класса, производного от Composite, и управлении виджетами внутри него. Пример такой реализации приведен в разделе 8.
Самостоятельная реализация
Иногда за основу нечего взять при реализации нового виджета. Это значит, что новый виджет придется реализовывать полностью самостоятельно, создавая новый обработчик события Paint. Конечно, такой способ достаточно сложен, но и у него есть преимущества: в результате получится полностью переносимая реализация.
Пользовательские управляющие элементы реализуются путем наследования классов Canvas или Composite. Используйте Canvas, если у вашего виджета не должно быть дочерних управляющих элементов.
Внутреннюю реализацию пользовательского виджета можно разбить на несколько основных задач:
Создание в конструкторе необходимых графических объектов и сохранение их в переменной экземпляра. Создание в классах Canvas или Composite получателя запросов dispose, служащего для освобождения этих объектов после уничтожения виджета.
Добавление paintListener в класс Canvas или Composite и оформление виджета согласно вашим предпочтениям. Если виджет составной, то можно оптимизировать этот процесс и не делать лишнюю работу, рассчитывая и оформляя только то, что необходимо.
Проверка перерисовки виджета при использовании вызовов API, влияющих на его внешний вид. Вообще, для перерисовки виджета следует не вызывать напрямую перерисовывающий код, а пользоваться методом redraw, служащим для уничтожения виджета и перерисовки его заново. При таком подходе платформа может собрать ваш запрос на прорисовку и другие аналогичные ожидающие запросы в один запрос, таким образом, ускоряя выполнение кода.
Если в API виджета объявлены события, то необходимо указание событий низкого уровня классов Canvas или Composite, которые будут их
32