Часто наилучший способ обработки простого позиционирования виджета - событие изменения размера. Однако есть общие шаблоны, используемые в приложениях для размещения виджетов. Эти шаблоны представляют собой настраиваемые алгоритмы макета, которые могут использоваться много раз в различных приложениях.
В SWT предусмотрены макеты, служащие для задания размещения и изменения размеров дочерних виджетов в составном. Макеты - это производные классы абстрактного класса Layout. Стандартные макеты в SWT находятся в пакете org.eclipse.swt.layout.
При размещении виджетов и изменении их размеров следует знать несколько основных определений:
Эти принципы актуальны для приложений независимо от того, используется ли макет. Макет можно считать подходящим способом группирования функций изменения размеров для многократного применения.
Макеты вводят несколько дополнительных понятий:
Дополнительные сведения и иллюстрации, объясняющие эти понятия, находятся в статье Understanding layouts in SWT.
В следующем фрагменте показан простой случай, когда приложение с помощью обратного вызова изменения размеров увеличивает размер метки до размера ее родительской оболочки:
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 ());
Даже в этом простом примере использование макета позволяет уменьшить код приложения. Чем сложнее макет, тем сильнее упрощается код.
В следующей таблице приведен список стандартных макетов SWT.
Макет |
Назначение |
---|---|
FillLayout | Служит для размещения управляющих элементов в отдельной строке или столбце, выравнивая таким образом их размер. |
FormLayout | Размещает дочерние объекты, используя FormAttachment для настройки их границ. |
GridLayout | Размещает дочерние объекты, привязывая их к сетке. |
RowLayout | Выстраивает дочерние объекты вертикально или горизонтально. |