- •Обозначения и сокращения
- •Введение
- •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 Пример приложения с элементами анимации
- •Список использованных источников
3 Макеты
При построении самостоятельных приложений с графическим интерфейсом важной задачей является сохранение внешнего вида окна и пропорций размещения элементов управления при изменении размеров главного окна приложения. При «ручном» решении таких задач необходимо обрабатывать событие, связанное с изменением размера окна и пересчитывать размеры и положение элементов. Однако есть общие подходы, позволяющие решать автоматически изменять указанные параметры. Это так называемые макеты или шаблоны, используемые в приложениях для размещения виджетов. Эти шаблоны реализуют настраиваемые алгоритмы размещения элементов, которые могут использоваться много раз в различных приложениях.
В SWT предусмотрены макеты, служащие для задания размещения и изменения размеров дочерних виджетов внутри контейнера. Макеты — это производные абстрактного класса Layout. Стандартные классы макетов в SWT находятся в пакете org.eclipse.swt.layout.
При размещении виджетов и изменении их размеров следует учитывать несколько основных определений:
•Расположение виджета – это его относительные координаты x и y в родительском виджете.
•Предпочтительный размер виджета – это минимальный размер, необходимый для отображения его содержимого. Он рассчитывается отдельно для каждого типа виджета.
•Область содержимого – область, в которой могут полностью поместиться дочерние объекты.
•Рамка – расстояние от области содержимого виджета до его действительной границы. Эту зону занимают границы виджета или пространство за его краями. Размер и внешний вид рамки зависят от виджета и платформы.
Эти принципы актуальны для приложений независимо от того, используется или нет макет. Макет можно считать подходящим способом группового изменения положения и размеров элементов для многократного применения.
Макеты вводят несколько дополнительных понятий:
-Некоторые макеты поддерживают расстояние между виджетами.
-Некоторые макеты поддерживают поле между краем макета и смежным с этим краем виджетом.
83
В следующем фрагменте показан простой пример, когда приложение с помощью вызова обработчика добавлений элементов в оболочку увеличивает размер метки до размера ее родительской оболочки:
Display display = new Display (); Shell shell = new Shell (display);
Label label = new Label (shell, SWT.CENTER); shell.addControlListener (new ControlAdapter () {
// Обработка события добавления
public void controlResized (ControlEvent e) { label.setBounds (shell.getClientArea ());
// Изменили размер
}
});
В следующем фрагменте то же самое делается с помощью макета:
Display display = new Display ();
Shell shell = new Shell (display);
Label label = new Label (shell, SWT.CENTER); shell.setLayout (new FillLayout ());
Даже в этом простом примере использование макета позволяет уменьшить код приложения. Чем сложнее макет, тем сильнее упрощается код.
В следующей таблице 3.1 приведен список стандартных макетов SWT.
Таблица 3.1 – Макеты
Макет |
Назначение |
|
FillLayout |
Служит для размещения управляющих элементов в отдельной |
|
строке или столбце, выравнивая, таким образом, их размер |
||
|
||
FormLayout |
Размещает дочерние объекты, используя FormAttachment для |
|
настройки их границ |
||
GridLayout |
Размещает дочерние объекты, привязывая их к сетке |
|
RowLayout |
Выстраивает дочерние объекты вертикально или горизонтально |
|
|
|
3.1 Класс FillLayout
java.lang.Object
org.eclipse.swt.widgets.Layout
org.eclipse.swt.layout.FillLayout
FillLayout – самый простой класс макетов (таблица 3.2). Он размещает элементы управления в одной колонке или строке, делая их размеры одинаковыми. Первоначально, элементы управления будут максимальной высоты и максимальной ширины из всех имеющихся в окне. FillLayout не
84
обособляет элементы, но вы можете определить поля и промежутки между элементами.
Вы можете использовать этот макет, чтобы разместить кнопки задач или средств в палитре, или сгруппировать переключатели. FillLayout может использоваться, когда контейнер класса Composite имеет только одного ребенка. Например, если Shell имеет единственный дочерний элемент Group, FillLayout заставит группу полностью заполнять оболочку (если размер поля равен 0).
Пример. Для FillLayout задается тип области, затем макет устанавливается в главное окно, являющимся потомком класса Composite. Отметьте, что дочерние элементы в FillLayout всегда имеют одинаковые размеры и заполняют все доступное пространство.
FillLayout fillLayout = new FillLayout(); fillLayout.type = SWT.VERTICAL; shell.setLayout(fillLayout);
Таблица 3.2 – Методы компонентов класса FillLayout
|
Поля класса |
int |
marginHeight определяет количество пикселей вертикального промежутка, |
|
которое будет установлено вдоль верхней и нижней границ макета |
int |
marginWidth определяет количество пикселей горизонтального |
|
промежутка, которое будет установлено вдоль левых и правых краев |
|
макета |
int |
spacing определяет расстояние в количестве пикселей между краем одной |
|
ячейки и краем соседней ячейки |
int |
type определяет как элементы управления будут позиционированы в |
|
пределах формата |
|
Конструкторы класса |
FillLayout() – Создать элемент класса
FillLayout(int type) – Создать элемент класса заданного типа
|
Методы класса |
protected |
computeSize(Composite composite, int wHint, int hHint, boolean |
Point |
flushCache) – Вычисляет и возвращает размер составной |
|
клиентской области согласно этому формату |
protected |
flushCache(Control control) – Сбросить кеш, связанный с |
boolean |
элементом, определенным аргументом control |
protected |
layout(Composite composite, boolean flushCache) – Размещает |
85
void |
детей определенного composite согласно макета |
String |
toString() – Возвращает строковое содержание, человеческое |
|
удобочитаемое описание получателя |
|
|
3.2 Класс GridLayout
java.lang.Object
org.eclipse.swt.widgets.Layout
org.eclipse.swt.layout.GridLayout
Экземпляры этого класса (таблица 3.3) размещают дочерние элементы управления в виде сетки, состоящей из строк и столбцов.
GridLayout имеет множество конфигурируемых областей и управляет их размещением с использованием связанных объектов данных макета класса GridData. Возможности GridLayout основаны на способности конфигурировать GridData для каждого элемента управления в макете.
Следующей код создает оболочку управляемую GridLayout с тремя колонками:
Display display = new Display(); Shell shell = new Shell(display);
GridLayout gridLayout = new GridLayout(); gridLayout.numColumns = 3; shell.setLayout(gridLayout);
Поле numColumns является наиболее важным в GridLayout. Виджеты располагаются в колонке слева направо, и новая строка элементов в окне создается тогда, когда в текущей строке добавляется (numColumns + 1) – й элемент управления.
Таблица 3.3 – Методы компонентов класса GridLayout
|
Обзор полей |
int |
horizontalSpacing – определяет количество пикселей между краем |
|
справа одной ячейки и левым краем соседней ячейки |
boolean |
makeColumnsEqualWidth – сделать все колонки в макете |
|
одинаковой ширины |
int |
marginBottom – количество пикселей по вертикали, которое будет |
|
установлено вдоль нижняя границы макета |
int |
marginHeight – количество пикселей по вертикали, которое будет |
|
установлено вдоль верхней границы макета |
int |
marginLeft – количество пикселей по горизонтали, которое будет |
|
установлено вдоль левой границы макета |
|
86 |
int |
marginRight – количество пикселей по горизонтали, которое будет |
|
установлено вдоль правой границы макета |
|
|
int |
marginTop – количество пикселей по вертикали, которое будет |
|
установлено вдоль верхней границы макета |
int |
marginWidth – количество пикселей по горизонтали, которое будет |
|
установлено вдоль левой и правой границ макета |
int |
numColumns – число колонок макета |
|
|
int |
verticalSpacing – количество пикселей по вертикали, которое будет |
|
установлено между элементами макета |
|
Конструкторы класса |
|
|
GridLayout() – создание экземпляра класса
GridLayout(int numColumns, boolean makeColumnsEqualWidth) – создание экземпляра класса с заданными параметрами
|
Методы |
protected |
computeSize(Composite composite, int wHint, int hHint, boolean |
Point |
flushCache) – Вычислить размер определенной составной области |
|
клиента для этого макета |
protected |
flushCache(Control control) – Сбрасывать любые кеш значения, |
boolean |
связанные с элементом управления, заданным аргументом |
protected |
layout(Composite composite, boolean flushCache) – Разместить |
void |
потомков определенного окна согласно этому макета |
String |
toString() – Конвертировать в строковое представление |
|
|
|
|
87