Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
2013_1 / ООП / Введение_SWG.pdf
Скачиваний:
82
Добавлен:
23.02.2015
Размер:
3.32 Mб
Скачать

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

Соседние файлы в папке ООП