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

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 ();

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