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

});

ImageData maskData = new ImageData (20, 20, 1, palette);

Image mask = new Image (display, maskData); gc = new GC (mask);

gc.setBackground (black); gc.fillRectangle (0, 0, 20, 20); gc.setBackground (white); gc.fillRectangle (5, 5, 10, 10); gc.dispose ();

maskData = mask.getImageData ();

Image icon = new Image (display, imageData, maskData);

Shell shell = new Shell (display);

Button button = new Button (shell, SWT.PUSH); button.setImage (icon);

button.setSize (60, 60); shell.open ();

4.2 Класс Canvas

Для размещения произвольных текстов и рисунков в рабочей области произвольного виджета с ней связан объект класса Canvas (таблица 4.3). java.lang.Object

org.eclipse.swt.widgets.Widget

org.eclipse.swt.widgets.Control

org.eclipse.swt.widgets.Scrollable

org.eclipse.swt.widgets.Composite

org.eclipse.swt.widgets.Canvas

Этот класс может быть подклассом простых элементов

управления. Для рисования класс не имеет собственные методы. Поле handle класс наследует от org.eclipse.swt.widgets.Control. Конструктор класса Canvas(Composite parent, int style) создает новый экземпляр, имеющий указанного родителя и стиль, описывающий поведение и показ.

Таблица 4.3 – Методы компонентов класса Canvas

Тип

Метод

Caret

getCaret() – Возвращает caret. Каретка (текстовый курсор) для

 

элемента управления автоматически спрятана и показывается, когда

 

элемент закрашен или изменяет размеры, когда приобретен или

 

потерян фокус, когда он перемещается. Чтобы избегать рисования

 

выше каретки, программист должен прятать и показывать ее

void

scroll(int destX, int destY, int x, int y, int width, int height, boolean all) –

 

Смещает прямоугольную область приемника копирование исходной

 

области в конечную вызывает перерисовку необходимых фрагментов

118

void

 

setCaret(Caret caret) – Установка курсора приемника

void

 

setFont(Font font) – Установка указанного шрифта для приемника

 

 

или стандартного при задании аргумента null

 

 

 

 

Пример прокручивания изображения (рисунок 4.3).

Рисунок 4.3 – Прокручивание изображения

Display display = new Display (); Shell shell = new Shell (display); shell.setLayout(new FillLayout()); Image originalImage = null;

FileDialog dialog = new FileDialog (shell, SWT.OPEN); dialog.setText ("Open an image file or cancel"); String string = dialog.open ();

if (string != null) {

originalImage = new Image (display, string);

}

if (originalImage == null) {

int width = 150, height = 200;

originalImage = new Image (display, width, height); GC gc = new GC (originalImage);

gc.fillRectangle (0, 0, width, height); gc.drawLine (0, 0, width, height); gc.drawLine (0, height, width, 0); gc.drawText ("Default Image", 10, 10); gc.dispose ();

}

final Image image = originalImage; final Point origin = new Point (0, 0);

final Canvas canvas = new Canvas (shell, SWT.NO_BACKGROUND |

SWT.NO_REDRAW_RESIZE | SWT.V_SCROLL | SWT.H_SCROLL); final ScrollBar hBar = canvas.getHorizontalBar (); hBar.addListener (SWT.Selection, new Listener () {

public void handleEvent (Event e) {

int hSelection = hBar.getSelection (); int destX = -hSelection - origin.x;

Rectangle rect = image.getBounds ();

119

canvas.scroll (destX, 0, 0, 0, rect.width, rect.height, false);

origin.x = -hSelection;

}

});

final ScrollBar vBar = canvas.getVerticalBar (); vBar.addListener (SWT.Selection, new Listener () {

public void handleEvent (Event e) {

int vSelection = vBar.getSelection (); int destY = -vSelection - origin.y; Rectangle rect = image.getBounds (); canvas.scroll (0, destY, 0, 0, rect.width,

rect.height, false);

origin.y = -vSelection;

}

});

canvas.addListener (SWT.Resize, new Listener () { public void handleEvent (Event e) {

Rectangle rect = image.getBounds (); Rectangle client = canvas.getClientArea (); hBar.setMaximum (rect.width); vBar.setMaximum (rect.height);

hBar.setThumb (Math.min (rect.width, client.width)); vBar.setThumb (Math.min (rect.height,

client.height));

int hPage = rect.width - client.width; int vPage = rect.height - client.height; int hSelection = hBar.getSelection (); int vSelection = vBar.getSelection (); if (hSelection >= hPage) {

if (hPage <= 0) hSelection = 0; origin.x = -hSelection;

}

if (vSelection >= vPage) {

if (vPage <= 0) vSelection = 0; origin.y = -vSelection;

}

canvas.redraw ();

}

});

canvas.addListener (SWT.Paint, new Listener () { public void handleEvent (Event e) {

GC gc = e.gc;

gc.drawImage (image, origin.x, origin.y);

Rectangle rect = image.getBounds (); Rectangle client = canvas.getClientArea (); int marginWidth = client.width - rect.width; if (marginWidth > 0) {

gc.fillRectangle (rect.width, 0, marginWidth,

120

client.height);

}

int marginHeight = client.height - rect.height; if (marginHeight > 0) {

gc.fillRectangle (0, rect.height, client.width,

marginHeight);

}

}

});

shell.setSize (200, 150); shell.open ();

while (!shell.isDisposed ()) {

if (!display.readAndDispatch ()) display.sleep ();

}

originalImage.dispose(); display.dispose ();

121

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