Макеты

Часто наилучший способ обработки простого позиционирования виджета - событие изменения размера. Однако есть общие шаблоны, используемые в приложениях для размещения виджетов. Эти шаблоны представляют собой настраиваемые алгоритмы макета, которые могут использоваться много раз в различных приложениях.

В 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 Выстраивает дочерние объекты вертикально или горизонтально.