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

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

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