- •Обозначения и сокращения
- •Введение
- •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.5 Класс RowData
java.lang.Object
org.eclipse.swt.layout.RowData
Каждый элемент, управляемый RowLayout, может иметь начальную ширину и высота, заданные установкой связанного с ним объекта RowData (таблица 3.6).
Следующий код использует объект RowData для изменения начального размера кнопки в оболочке:
Display display = new Display();
Shell shell = new Shell(display); shell.setLayout(new RowLayout());
Button button1 = new Button(shell, SWT.PUSH); button1.setText("Button 1"); button1.setLayoutData(new RowData(50, 40));
Таблица 3.6 – Методы компонентов класса RowData
|
Поля |
boolean |
exclude – исключить информирование макета, чтобы игнорировать |
|
при калибровке и позиционировании элементов управления |
int |
height – высота в пикселях |
int |
width – ширина в пикселях |
|
Конструкторы класса |
RowData() – Создает новый экземпляр RowData, использовав значения по умолчанию
RowData (int width, int height) – Создает новый экземпляр RowData, использовав параметры
RowData (Point point) – Создает новый экземпляр RowData, использовав параметры
|
Методы |
String |
toString() – Преобразовать в строковое представление |
|
|
3.6 Класс FormLayout
java.lang.Object
org.eclipse.swt.widgets.Layout org.eclipse.swt.layout.FormLayout
96
Экземпляры этого класса (таблица 3.7) управляют позицией и размером дочерних элементов контейнера, используя FormAttachments для задания их левой, верхней, правой и нижней границ. Следующий код примера создает FormLayout и подключает его к оболочке:
Display display = new Display ();
Shell shell = new Shell(display);
FormLayout layout = new FormLayout(); layout.marginWidth = 3; layout.marginHeight = 3; shell.setLayout(layout);
Для использования FormLayout создается объект класса FormData с FormAttachment для каждого дочернего элемента. Следующий код прикрепляет button1 к верхней левой кромке окна и button2 к правой кромке button1 и верхней правой кромке окна:
FormData data1 = new FormData(); data1.left = new FormAttachment(0, 0); data1.top = new FormAttachment(0, 0); button1.setLayoutData(data1); FormData data2 = new FormData();
data2.left = new FormAttachment(button1); data2.top = new FormAttachment(0, 0); data2.right = new FormAttachment(100, 0); button2.setLayoutData(data2);
Каждая сторона дочернего элемента управления может быть прикреплена к позиции в родительском контейнере или к другим элементам в пределах контейнера созданием экземпляра класса FormAttachment и присваиванием их как верхний, нижний, левый или правый атрибут дочернего объекта FormData.
Если некоторой стороне не задано присоединение, то она считается свободной, и потомок остается в своем предпочтительном размере. Если потомку не задано никакое присоединение, он автоматически присоединяется к левой и верхней границе соответственно. Следующий код позиционирует button1 и button2, но полагается во встроенные присоединения:
FormData data2 = new FormData(); data2.left = new FormAttachment(button1); data2.right = new FormAttachment(100, 0); button2.setLayoutData(data2);
Замечание: не определяйте циклические присоединения. Например, не подключайте правый край button1 к левому краю button2, затем левый край button2 к правому краю button1. Это будет нарушать ограничения макета,
97
вызывая неопределенное поведение. Алгоритм проработает, но результаты не определены.
Таблица 3.7 – Методы компонентов класса FormLayout
|
Поля |
int |
marginBottom – количество пикселей по вертикали, которое будет |
|
установлено от нижней границы формата |
int |
marginHeight – количество пикселей по вертикали, которое будет |
|
установлено от нижней и верхней границ формата |
int |
marginLeft – количество пикселей по горизонтали, которое будет |
|
установлено от левой границы формата |
int |
marginRight – количество пикселей по горизонтали, которое будет |
|
установлено от правой границы формата |
int |
marginTop – количество пикселей по вертикали, которое будет |
|
установлено от верхней границы формата |
int |
marginWidth – количество пикселей по горизонтали, которое будет |
|
установлено от левой и правой границ формата |
int |
spacing – расстояние между краем одного управления и краем |
|
соседнего элемента управления |
|
Конструктор класса |
|
|
FormLayout() – Создает новый экземпляр класса |
|
|
Методы |
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() – Возвращает строку содержащую краткое, |
|
удобочитаемое описание получателя |
|
|
Пример:
Display display = new Display ();
final Shell shell = new Shell (display);
Label label = new Label (shell, SWT.WRAP);
98
label.setText ("This is a long text string that will wrap when the dialog is resized.");
List list = new List (shell, SWT.BORDER | SWT.H_SCROLL |
SWT.V_SCROLL);
list.setItems (new String [ ] {"Item 1", "Item 2"}); Button button1 = new Button (shell, SWT.PUSH); button1.setText ("OK");
Button button2 = new Button (shell, SWT.PUSH); button2.setText ("Cancel");
final int insetX = 4, insetY = 4;
FormLayout formLayout = new FormLayout (); formLayout.marginWidth = insetX; formLayout.marginHeight = insetY; shell.setLayout (formLayout);
Point size = label.computeSize (SWT.DEFAULT, SWT.DEFAULT); final FormData labelData = new FormData (size.x, SWT.DEFAULT); labelData.left = new FormAttachment (0, 0);
labelData.right = new FormAttachment (100, 0); label.setLayoutData (labelData); shell.addListener (SWT.Resize, new Listener () {
public void handleEvent (Event e) {
Rectangle rect = shell.getClientArea (); labelData.width = rect.width - insetX * 2; shell.layout ();
}
});
FormData button2Data = new FormData (); button2Data.right = new FormAttachment (100, -insetX); button2Data.bottom = new FormAttachment (100, 0); button2.setLayoutData (button2Data);
FormData button1Data = new FormData ();
button1Data.right = new FormAttachment (button2, -insetX); button1Data.bottom = new FormAttachment (100, 0); button1.setLayoutData (button1Data);
FormData listData = new FormData (); listData.left = new FormAttachment (0, 0); listData.right = new FormAttachment (100, 0); listData.top = new FormAttachment (label, insetY);
listData.bottom = new FormAttachment (button2, -insetY); list.setLayoutData (listData);
shell.pack (); shell.open ();