Вертикально расширяемый композит - PullRequest
0 голосов
/ 24 сентября 2010

Я создаю пользовательский интерфейс SWT, и у него есть окно (оболочка) с тремя композитами, расположенными один под другим.Я хочу, чтобы:

  1. все расширялось до максимально возможной ширины (ширины окна)
  2. первый и третий композиты имеют высоту 100px каждый
  3. третье составное расширение до высоты height_of_parent - 200px - any_margins_or_paddings.

Задача 2 тривиальна, и я выполнил Задачу 1, используя ColumnLayout, определенный здесь .

Как происходит невыполнение Целей 3?
Большое спасибо:)

PS: я очень новичок в SWT.

1 Ответ

0 голосов
/ 04 ноября 2010

Я бы использовал GridLayout и сделал бы что-то вроде этого:

GridLayout layout = new GridLayout();
parent.setLayout(layout);

GridData data1 = new GridData(SWT.LEFT, SWT.FILL, false, true);
data1.heightHint = 100;
widget1.setLayoutData(data1);

GridData data2 = new GridData(SWT.LEFT, SWT.FILL, false, true);
data2.heightHint = 100;
widget2.setLayoutData(data2);

GridData data3 = new GridData(SWT.LEFT, SWT.TOP, false, false);
data3.heightHint = Math.max(1, parent.getSize().y - 200 - layout.marginHeight * 2);
widget3.setLayoutData(data3);

parent.addControlListener(new ControlAdapter() {
    public void controlResized(ControlEvent e) {
        GridData data = (GridData)widget3.getLayoutData();
        data.heightHint = parent.getSize().y - 200 - layout.marginHeight * 2;
        widget3.setLayoutData(data);
        parent.layout(true);
    }
});
...