- •Обозначения и сокращения
- •Введение
- •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 Пример приложения с элементами анимации
- •Список использованных источников
9 Дополнительные возможности библиотеки SWG
Библиотека SWG (Standard Widget Graphic) [6] разработана фирмой IBM и распространяется с ограниченной лицензией без права свободного коммерческого использования продукта. Библиотека расширяет SWT в части графических возможностей. В частности, в дополнение к рисованию графических примитивов на графическом контексте видимых компонент большинство примитивов реализованы как самостоятельные классы компонент, позволяющие размещать их в любом контексте. Это избавляет программиста от необходимости обрабатывать события перерисовки, возлагая эти задачи на саму библиотеку. Добавлены методы работы с цветом, позволяя задавать цвет примитива с использованием стандартного разложения RGB. Существенное место занимают средства анимации, позволяющие создавать «живые» сцены. Различные классы и режимы интерполяции положения движущихся объектов позволяют программистам в широких пределах управлять сценариями и реализацией создаваемого фильма.
9.1 Компоненты управления
Компоненты управления библиотеки SWG максимально совместимы с компонентами SWT и содержат ряд новых примитивов: полигоны, эллипсы, линии и др. Новый стиль для всех старых и новых компонент SWT.LIGHTWEIGHT позволяет упростить работу с компонентами, перейдя от использования базовых окон операционной системы платформы к их векторному представлению. Это позволяет ускорить работу программ и добавляет новую функциональность компонентам.
Все графические компоненты имеют свойства Background — цвет для заполнения внутренней области и Foreground — цвет для изображения внешнего контура. Можно использовать образцы (Pattern) заливок и штриховок для внутренних областей компонент, параметр прозрачности (alfa).
Прежде размеры «тяжелых» примитивов основывались на границах окон, заданных методами setSize() или setBounds(), а положение определялось методом setLocation(). Размер мог определяться выбранным менеджером компоновки. Сейчас графические примитивы содержат свое изображение внутри ограничивающей их прямоугольной области (bounding box). Это позволяет легче манипулировать компонентами и подвергать их преобразованиям (масштабирование, поворот, смещение).
Трансформации в SWG основаны на стандартах трехмерной графики VRML, используя только две координаты. Координата (0,0) соответствует
158
левому верхнему углу области и положительное направление оси Х — влево, оси Y — вниз.
9.2 Виджеты
Несколько изменений внесены в класс виджетов, связанных с облегченной (lightweight) графикой и дополнительными событиями.
Объекты класса Event имеют новые поля:
•sceneTime — время наступления события в сценическом времени;
•repeatIteration — счетчик повторений анимации;
•fX — координата X указателя, вещественное число
•fY — координатаY указателя, вещественное число Дополнительные события для поддержки анимации:
•SWT.Begin — начало анимации;
•SWT.End — окончание анимации;
•SWT.Repeat — повторение анимации;
•SWT.Pause — пауза в анимации;
•SWT.Resume — восстановление анимации.
Обработчики событий AnimationEvent должны реализовывть дополнительные интерфейсы AnimationListener и AnimationAdapter, имеющие следующие методы:
•begin(AnimationEvent)
•end(AnimationEvent)
•repeat(AnimationEvent)
•pause(AnimationEvent)
•resume(AnimationEvent)
•Обработчики событий мышки имеют дополнительные поля события:
•fX — координата X указателя, вещественное число;
•fY — координатаY указателя, вещественное число.
9.3 Плоские формы
Класс AreaShape — абстрактный родительский класс для других плоских примитивов, имеющих прямоугольные области. Иерархия
159
родительских |
классов |
имеет |
вид: |
Widget/Control/GraphicControl/Graphic/AreaShape |
|
|
Отличительным свойством потомков этого класса является понятие размера (Dimension) — ширина и высота примитива. Для работы с этим свойством есть методы:
setDimension(float width, float height) — установка ширины и высоты;
setDimension(float[ ] dim) — установка ширины и высоты массивом
чисел;
setDimension(Point pt) — установка ширины и высоты вектором; setWidth(float width) — установка ширины ;
setHeight(float height) — установка ширины и высоты;
getDimension() — запрос ширины и высоты как вектора из двух чисел; getWidth() — запрос ширины;
getHeight() — запрос высоты;
Класс Oblong создает прямоугольные области с или без заливки. Является потомком класса AreaShape. Пример:
Oblong oblong = new Oblong(parent, SWT.NONE); oblong.setDimension(25.0F, 36.0F);
По умолчанию экземпляры класса имеют всегда стиль SWT.LIGHTWEIGHT, который нет необходимости указывать явно.
Класс RoundedOblong создает скругленные прямоугольные области с или без заливки. Является потомком класса AreaShape. В дополнение к методам родительского класса есть инструменты для работы с закруглениями:
setArcDimension(float arcWidth, float arcHeight) — задание ширины и высоты закруглений;
setArcDimension(float[ ] dim) — задание ширины и высоты закруглений; setArcDimension(Point pt) — задание ширины и высоты закруглений; setArcWidth(float arcWidth) — задание ширины закруглений; setArcHeight(float arcHeight) — задание высоты закруглений; getArcDimension() — запрос ширины и высоты закруглений; getArcWidth() — запрос ширины закруглений;
160
getArcHeight() — запрос высоты закруглений.
Абстрактный класс EllipticalShape является потомком класса AreaShape. Служит родителем для эллипсов, дуг и секторов. В дополнение к методам родительского класса есть инструменты для работы с радиусами закруглений:
setRadii(float rX, float rY) — задание радиусов по осям X, Y; setRadii(float[ ] dim) — задание радиусов по осям X, Y; setRadius(Point pt) — задание радиусов по осям X, Y; setRadiusX(float rX) — задание радиусов по X; setRadiusY(float rY) — задание радиусов по Y;
getRadii() — запрос массива радиусов по осям X, Y; getRadiusX() — запрос радиуса по X;
getRadiusY() — запрос радиуса по Y.
Класс Ellipse позволяет создавать эллипсы. Является потомком класса
EllipticalShape. Пример:
Ellipse ellipse = new Ellipse(parent, SWT.NONE); ellipe.setDimension(25.0F, 36.0F);
Класс ArcShape позволяет создавать дуги. Является потомком класса EllipticalShape. Пример:
Arc arc = new Arc(parent, SWT.NONE); arc.setRadii(50.0F, 40.0F); arc.setStartAngle(90.0F); arc.setArcAngle(60.0F);
Класс Pie позволяет создавать секторы. Является потомком класса
EllipticalShape. Пример:
Pie pie = new Arc(parent, SWT.NONE); pie.setRadii(50.0F, 40.0F); pie.setStartAngle(90.0F); pie.setArcAngle(60.0F);
9.4 Линии, точки и ломанные
Эта группа классов являются потомками класса Graphic.
161
Класс Line рисует экземпляры отрезков прямых между двумя заданными точками. Пример.
Line line = new Line(parent, SWT.NONE); line.setPoints(10.0F, 6.0F, 50.0F, 75.0F);
Дополнительные методы позволяют работать с координатами концов отрезка.
setPoints(float xS, float yS, float xE, float yE) — задание координат концов отрезка;
setPoints(float[ ] pts) — задание координат концов отрезка; setPoints(Point start, Point end) — задание координат концов отрезка; getPoints() — задпрос массива из четырех координат концов отрезка; setStart(float x, float y) — задание координат начала отрезка; setStart(Point start) — задание координат начала отрезка;
setEnd(float x, float y) — задание координат конца отрезка; setEnd(Point end) — задание координат конца отрезка; setStartX(float x) — задание координаты X начала отрезка; setStartY(float y) — задание координаты Y начала отрезка; setEndX(float x) — задание координаты X конца отрезка; setEndY(float y) — задание координаты Y конца отрезка; getStartX()— запрос координаты X начала отрезка; getStartY() — запрос координаты Y начала отрезка; getEndX() — запрос координаты X конца отрезка; getEndY() — запрос координаты Y конца отрезка.
Класс MultiPointShape — абстрактный класс для создания потомков полигонов и полилиний, потомок класса Graphic. Все экземпляры потомков этого класса имеют наборы точек для задания геометрии. Для работы с наборами точек определены методы:
getMinimumPointCount() — запрос минимального числа точек примитива;
getPointCount() — запрос числа точек примитива;
setPoints(float[ ] pts) — задание массива координат точек примитива; setPoints(Point[ ] pts) — задание массива точек примитива;
162
getPoints() — запрос массива координат точек примитива;
setPoints(float[ ] pts, int index) — задание массива координат точек примитива, начиная с указанной. Массив может только заменять ранее заданные координаты, а не добавлять;
setPoint(float x, float y, int index) — задание координат указанной точки; setPoint(Point pt, int index) — задание координат указанной точки; setPointX(float x, int index) — задание координаты X указанной точки; setPointY(float y, int index) — задание координаты Y указанной точки; getPointX(int index) — запрос координаты X указанной точки; getPointY(int index) — запрос координаты Y указанной точки.
Класс Polygon создает замкнутые ломанные фигуры, содержащие произвольное число вершин не менее трех. Пример.
float[ ] polyStar = {50,0, 80,90, 5,30, 95,30, 20,90};
float[ ] polyHexa = {20,10, 80,10, 100,50, 80,90, 20,90, 0,50};
Polygon star = new Polygon(parent, SWT.NONE); star.setPoints(polyStar); star.setBackgroundColor(darkCyan);
Polygon hexagon = new Polygon(parent, SWT.NONE); hexagon.setPoints(polyHexa); hexagon.setBackgroundColor(cyan); hexagon.setForegroundColor(red); hexagon.setLineWidth(4);
Класс Polygon создает замкнутые ломанные фигуры, содержащие произвольное число вершин не менее двух. Пример.
float[ ] polyStar = {50,0, 80,90, 5,30, 95,30, 20,90};
float[ ] polyHexa = {20,10, 80,10, 100,50, 80,90, 20,90, 0,50};
Polyline star = new Polyline(parent, SWT.NONE); star.setPoints(polyStar); star.setForegroundColor(cyan); star.setLineWidth(4);
Polyline hexagon = new Polyline(parent, SWT.NONE); hexagon.setPoints(polyHexa); hexagon.setForegroundColor(magenta); hexagon.setLineStyle(SWT.LINE_DASH); hexagon.setLineWidth(4);
163