- •Обозначения и сокращения
- •Введение
- •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 Пример приложения с элементами анимации
- •Список использованных источников
shell.addPaintListener (new PaintListener () { public void paintControl (PaintEvent event) {
GC gc = event.gc;
Color red = new Color (event.widget.getDisplay (), 0xFF,
0, 0);
gc.setForeground (red);
Rectangle rect = event.widget.getClientArea (); gc.drawRectangle (rect.x + 10, rect.y + 10, rect.width -
20, rect.height - 20);
gc.drawString (resHello.getString ("Hello_world"), rect.x
+ 20, rect.y + 20); red.dispose ();
}
});
4.1 Класс GC
java.lang.Object
org.eclipse.swt.graphics.Resource
org.eclipse.swt.graphics.GC
Класс GC содержит все возможности рисования, поддерживаемые в SWT (таблица 4.2). Экземпляры объектов этого класса используются для рисования на изображениях, элементах управления или непосредственно на экране.
Стили: LEFT_TO_RIGHT, RIGHT_TO_LEFT
Система координат SWT является двумерным пространством с началом (0,0) в левом верхнем углу области рисования и величинами (x, y), направленными вправо и вниз соответственно.
Прикладной код должен явно вызвать метод GC.dispose(), чтобы освободить ресурсы операционной системы, управляемые каждым экземпляром, когда они больше не требуются. Особенно важно на Windows95 и Windows98, где операционная система имеет ограниченное число доступных контекстов устройства.
Примечание: Только один из стилей LEFT_TO_RIGHT или RIGHT_TO_LEFT может быть определен.
Таблица 4.2 – Методы экземпляров класса GC
Поля
int Handle – дескриптор в контексте устройства OS (Предупреждение: Это поле является зависимым от платформы и не является частью общего
109
API SWT
Конструкторы
GC(Drawable drawable) – Создает новый объект этого класса, который сконфигурирован, чтобы рисовать на заданном носителе drawable
GC(Drawable drawable, int style) – Создает новый объект этого класса, который сконфигурирован, чтобы рисовать на заданном носителе drawable указанным стилем
|
Методы |
void |
copyArea(Image image, int x, int y) – Копирует прямоугольную |
|
область получателя в заданную позицию образ, который должен |
|
быть типа SWT.BITMAP |
void |
copyArea(int srcX, int srcY, int width, int height, int destX, int destY) |
|
– Копирует исходную прямоугольную область получателя в |
|
целевую позицию |
void |
copyArea(int srcX, int srcY, int width, int height, int destX, int destY, |
|
boolean paint) – Копирует исходную прямоугольную область |
|
получателя в целевую позицию. paint — если истины, то будут |
|
сгенерированы события paint для старых и обновленных областей |
void |
dispose() – Освободить ресурсы операционной системы, связанные |
|
с графическим контекстом |
void |
drawArc(int x, int y, int width, int height, int startAngle, int arcAngle) – |
|
Рисует линию, окружность или дугу в пределах заданной |
|
прямоугольной области |
void |
drawFocus(int x, int y, int width, int height) – Рисует прямоугольник, |
|
на основе заданных аргументов, который имеет фокус ввода, если |
|
платформа поддерживает такое понятие, и в противном случае |
|
простой прямоугольник цветом переднего плана получателя. |
void |
drawImage(Image image, int x, int y) – Рисует изображение в |
|
заданных координатах |
void |
drawImage(Image image, int srcX, int srcY, int srcWidth, int srcHeight, |
|
int destX, int destY, int destWidth, int destHeight) – Копирует |
|
прямоугольную область из исходного образа в (потенциально |
|
другого размера) на получателе |
void |
drawLine(int x1, int y1, int x2, int y2) – Рисует линию между точками |
|
(x1, y1) и (x2, y2) , использовав цвет переднего плана |
void |
drawOval(int x, int y, int width, int height) – Рисует овал, использовав |
|
|
|
110 |
|
цвет переднего плана, в пределах определенной прямоугольной |
|
области |
|
|
void |
drawPath(Path path) – Рисует путь, описываемый параметром |
|
|
void |
drawPoint(int x, int y) – Рисует пиксель, использовав цвет переднего |
|
плана, в определенной точке (x, y) |
void |
drawPolygon(int[ ] pointArray) – Рисует закрытый полигон с |
|
заданными массивом координат точками цветом переднего плана |
|
получателя |
void |
drawPolyline(int[ ] pointArray) – Рисует полилинию с заданными |
|
массивом координат точками цветом переднего плана получателя |
void |
drawRectangle(int x, int y, int width, int height) – Рисует |
|
прямоугольник с заданными координатами и размерами цветом |
|
переднего плана получателя |
void |
drawRectangle(Rectangle rect) – Рисует прямоугольник с заданными |
|
параметрами цветом переднего плана получателя |
void |
drawRoundRectangle(int x, int y, int width, int height, int arcWidth, int |
|
arcHeight) – Рисует скругленный прямоугольник с заданными |
|
параметрами цветом переднего плана получателя |
void |
drawString(String string, int x, int y) – Рисует строку с заданными |
|
параметрами цветом переднего плана получателя |
void |
drawString(String string, int x, int y, boolean isTransparent) – Рисует |
|
строку с заданными параметрами цветом переднего плана |
|
получателя. Если isTransparent — истина фон будет прозрачным, в |
|
противном случае он будет непрозрачным |
void |
drawText(String string, int x, int y) – Рисует строку с заданными |
|
параметрами текущим шрифтом и цветом переднего плана |
|
получателя |
void |
drawText(String string, int x, int y, boolean isTransparent) – Рисует |
|
строку с заданными параметрами текущим шрифтом и цветом |
|
переднего плана получателя. Если isTransparent — истина фон |
|
будет прозрачным, в противном случае он будет непрозрачным |
void |
drawText(String string, int x, int y, int flags) – Рисует строку с |
|
заданными параметрами текущим шрифтом и цветом переднего |
|
плана получателя. Параметр flags может быть комбинацией |
|
констант: DRAW_DELIMITER – рисовать множественные линии; |
|
DRAW_TAB – закладки; DRAW_MNEMONIC – подчеркивание; |
|
DRAW_TRANSPARENT – прозрачный фон |
111
boolean |
equals(Object object) – Сравнивает аргумент с получателем и |
|
возвращает истину если они представляют тот же объект |
|
|
void |
fillArc(int x, int y, int width, int height, int startAngle, int arcAngle) – |
|
Закрашенный круг или эллиптическая дуга в пределах |
|
определенной прямоугольной области, с цветом фона получателя |
void |
fillGradientRectangle(int x, int y, int width, int height, boolean vertical) |
|
– Закрашенный прямоугольник с градиентом от цвета фона до |
|
цвета получателя |
void |
fillOval(int x, int y, int width, int height) – Закрашенный овал в |
|
пределах определенной прямоугольной области, с цветом фона |
|
получателя |
void |
fillPath(Path path) – Закрашенный путь |
|
|
void |
fillPolygon(int[ ] pointArray) – Закрашенный полигон с заданными |
|
точками с цветом фона получателя |
void |
fillRectangle(int x, int y, int width, int height) – Закрашенный |
|
прямоугольник с заданными точками с цветом фона получателя |
void |
fillRectangle(Rectangle rect) – Закрашенный прямоугольник с |
|
заданными точками с цветом фона получателя |
void |
fillRoundRectangle(int x, int y, int width, int height, int arcWidth, int |
|
arcHeight) – Закрашенный скругленный прямоугольник с |
|
заданными точками с цветом фона получателя |
boolean |
getAdvanced() – Возвращается true, если получатель использует |
|
операционную систему, имеющую графическую подсистему |
int |
getAdvanceWidth(char ch) – Возвращает ширину определенного |
|
символа в шрифте, который к настоящему времени выбран для |
|
получателя |
int |
getAlpha() – Возвращает величину alpha получателя |
|
|
int |
getAntialias() – Возвращает установленное значение |
|
антиналожения, который будет одним из SWT.DEFAULT, |
|
SWT.OFF или SWT.ON |
Color |
getBackground() – Возвращает цвет фона |
|
|
Pattern |
getBackgroundPattern() – Возвращает образец фона |
|
|
int |
getCharWidth(char ch) – Возвращает ширину определенного |
|
символа для выбранного на получателе шрифта |
Rectang |
getClipping() – Возвращает прямоугольник региона отсечения |
le |
получателя. Если никакое отсечение не установлено, величина |
112
|
будет прямоугольником, который покрывает границы объекта на |
|
котором получатель рисуется |
|
|
void |
getClipping(Region region) – Устанавливает текущий регион |
|
отсечения получателя |
int |
getFillRule() – Возвращает правила заполнителя получателя, |
|
которые будут одно из SWT.FILL_EVEN_ODD или |
|
SWT.FILL_WINDING |
Font |
getFont() – Возвращает шрифт к настоящему времени |
|
использованный получателем, чтобы рисовать и измерять текст. |
FontMe |
getFontMetrics() – Возвращает FontMetrics, который содержит |
trics |
информацию о шрифте к настоящему времени использованным |
|
получателем, чтобы рисовать и измерять текст |
Color |
getForeground() – Возвращает цвет переднего плана получателя. |
Pattern |
getForegroundPattern() – Возвращает образец переднего плана. |
int |
getInterpolation() – Возвращает установку интерполяции |
|
получателя, которая будет одно из SWT.DEFAULT, SWT.NONE, |
|
SWT.LOW или SWT.HIGH |
int |
getLineCap() – Возвращает стиль колпачка линии получателя, |
|
который будет одной из констант SWT.CAP_FLAT, |
|
SWT.CAP_ROUND, или SWT.CAP_SQUARE |
int[ ] |
getLineDash() – Возвращает точечный стиль линии получателя. |
int |
getLineJoin() – Возвращает стиль присоединения для линии |
|
получателя, который будет одной из констант SWT.JOIN_MITER, |
|
SWT.JOIN_ROUND, или SWT.JOIN_BEVEL |
int |
getLineStyle() – Возвращает стиль линии получателя, одна из |
|
констант SWT.LINE_SOLID, SWT.LINE_DASH, SWT.LINE_DOT, |
|
SWT.LINE_DASHDOT или SWT.LINE_DASHDOTDOT |
int |
getLineWidth() – Возвращает ширину, которая будет использована |
|
при рисовании линий для фигур (то есть, drawLine, drawRectangle, |
|
drawPolyline, и так далее |
int |
getStyle() – Возвращает информацию о стиле получателя |
|
|
int |
getTextAntialias() – Возвращает установки величины анти- |
|
наложения текста получателя, который будет одно из |
|
SWT.DEFAULT, SWT.OFF или SWT.ON |
void |
getTransform(Transform transform) – Параметр превращать, что к |
|
настоящему времени используется получателем |
113
boolean |
getXORMode() – Возвращается верно если это GC рисует способом |
|
где результирующий цвет в точке «исключительное или» цветов в |
|
источнике и точке, и лжи если цвет точки заменяется на новый |
int |
hashCode() – Возвращает целый хеш код для получателя |
boolean |
isClipped() – Возвращается верно, если у получателя был |
|
установлен регион вырезки, и ложь, в противном случае |
boolean |
isDisposed() – Возвращается верно, если GC удален, и ложь, в |
|
противном случае |
void |
setAdvanced(boolean advanced) – Устанавливает получателя, чтобы |
|
всегда использовал графическую подсистему, предоставленную |
|
операционной системой для всех графических действий, если |
|
аргумент является истиной |
void |
setAlpha(int alpha) – Устанавливает величину alpha получателя. |
void |
setAntialias(int antialias) – Устанавливает у получателя значение |
|
анти-наложения, которое должно быть одно из SWT.DEFAULT, |
|
SWT.OFF или SWT.ON |
void |
setBackground(Color color) – Устанавливает цвет фона |
void |
setBackgroundPattern(Pattern pattern) – Устанавливает образец фона |
void |
setClipping(int x, int y, int width, int height) – Устанавливает область |
|
получателя, которая может быть изменена рисованием |
|
прямоугольником, определенный аргументами (ограничение) |
void |
setClipping(Path path) – Устанавливает область получателя, которая |
|
может быть изменена рисованием ломаной, определенной |
|
аргументами (ограничение) |
void |
setClipping(Rectangle rect) – Устанавливает область получателя, |
|
которая может быть изменена рисованием прямоугольником, |
|
определенный аргументами (ограничение) |
void |
setClipping(Region region) – Устанавливает область получателя, |
|
которая может быть изменена рисованием прямоугольником, |
|
определенный аргументами (ограничение) |
void |
setFillRule(int rule) – Устанавливает правила заполнителя |
|
получателя в параметр, который должен быть одним из |
|
SWT.FILL_EVEN_ODD или SWT.FILL_WINDING |
void |
setFont(Font font) – Устанавливает шрифт, который будет |
|
использован получателем, чтобы рисовать и измерять текст |
void |
setForeground(Color color) – Устанавливает цвет переднего плана. |
114
void |
setForegroundPattern(Pattern pattern) – Устанавливает образец |
|
переднего плана |
|
|
void |
setInterpolation(int interpolation) – Устанавливает интерполяцию |
|
получателя в параметр, который должен быть одно из |
|
SWT.DEFAULT, SWT.NONE, SWT.LOW или SWT.HIGH |
void |
setLineCap(int cap) – Устанавливает стиль колпачка линии |
|
получателя в аргумент, который должен быть одной из констант |
|
SWT.CAP_FLAT, SWT.CAP_ROUND, или SWT.CAP_SQUARE |
void |
setLineDash(int[ ] dashes) – Устанавливает у получателя стиль |
|
штриховой линии в заданный аргумент |
void |
setLineJoin(int join) – Устанавливает получателя присоединение |
|
линий заданным стилем, который должен быть одной из констант |
|
SWT.JOIN_MITER, SWT.JOIN_ROUND, или SWT.JOIN_BEVEL |
void |
setLineStyle(int lineStyle) – Устанавливает стиль линии получателя, |
|
который должен быть одной из констант SWT.LINE_SOLID, |
|
SWT.LINE_DASH, SWT.LINE_DOT, SWT.LINE_DASHDOT или |
|
SWT.LINE_DASHDOTDOT |
void |
setLineWidth(int lineWidth) – Устанавливает ширину, которая будет |
|
использована при рисовании линий для всей фигуры (то есть, |
|
drawLine, drawRectangle, drawPolyline, и так далее |
void |
setTextAntialias(int antialias) – Устанавливает получателя анти- |
|
наложение текста в значение, которое должно быть одно из |
|
SWT.DEFAULT, SWT.OFF или SWT.ON |
void |
setTransform(Transform transform) – Устанавливает transform для |
|
использования получателем |
void |
setXORMode(boolean xor) – Устарела. Это функциональное |
|
назначение не поддержано на некоторых платформах |
Point |
stringExtent(String string) – Возвращает протяженность данной |
|
строки |
Point |
stringExtent(String string, int flags) – Возвращает протяженность |
|
данной строки |
String |
toString() – Возвращает краткое, удобочитаемое описание |
|
получателя |
static |
win32_new(Drawable drawable, GCData data) – Вызов |
GC |
специфической функции платформы, чтобы назначить новый |
|
графический контекст |
115
static |
win32_new(int hDC, GCData data) – Вызов специфической функции |
GC |
платформы, чтобы обертывать графический контекст |
|
|
|
|
Примеры.
Рисование толстой линии (рисунок 4.1)
Display display = new Display ();
Shell shell = new Shell (display); shell.open ();
GC gc = new GC (shell); gc.setLineWidth (4); gc.drawRectangle (20, 20, 100, 100); gc.dispose ();
while (!shell.isDisposed ()) {
if (!display.readAndDispatch ()) display.sleep ();
}
display.dispose ();
Измерение строки
Display display = new Display ();
Shell shell = new Shell (display); shell.setLayout (new RowLayout ());
Label label = new Label (shell, SWT.NONE);
Рисунок 4.1 – Пример рисования линии
GC gc = new GC (label);
Point size = gc.textExtent ("Hello"); gc.dispose ();
label.setText ("Hello -> " + size); shell.pack ();
shell.open ();
Рисование мышкой
Listener listener = new Listener () { int lastX = 0, lastY = 0;
116
public void handleEvent (Event event) { switch (event.type) {
case SWT.MouseMove:
if ((event.stateMask & SWT.BUTTON1) == 0)
break;
GC gc = new GC (shell);
gc.drawLine (lastX, lastY, event.x,
event.y);
gc.dispose ();
//FALL THROUGH case SWT.MouseDown:
lastX = event.x; lastY = event.y; break;
}
}
};
shell.addListener (SWT.MouseDown, listener); shell.addListener (SWT.MouseMove, listener); shell.open ();
Иконки (рисунок 4.2)
Display display = new Display ();
Color red = display.getSystemColor (SWT.COLOR_RED); Color white = display.getSystemColor (SWT.COLOR_WHITE); Color black = display.getSystemColor (SWT.COLOR_BLACK);
Рисунок 4.2 – Пример рисования иконки
Image image = new Image (display, 20, 20);
GC gc = new GC (image); gc.setBackground (red); gc.fillRectangle (5, 5, 10, 10); gc.dispose ();
ImageData imageData = image.getImageData ();
PaletteData palette = new PaletteData ( new RGB [ ] {
new RGB (0, 0, 0),
new RGB (0xFF, 0xFF, 0xFF),
117