- •Обозначения и сокращения
- •Введение
- •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 Пример приложения с элементами анимации
- •Список использованных источников
});
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