Как заставить полосы прокрутки работать в ScrolledComposite при использовании GridLayout?

Я пытаюсь создать прокручиваемую композицию с содержимым фиксированного размера и надписью под прокрученной композиционной информацией о состоянии прокручиваемого содержимого. Поскольку я хочу, чтобы элементы управления изменяли размеры вместе с родителем, я использовал GridLayout для их родителя. Но я сталкиваюсь с проблемой с полосами прокрутки прокручиваемого композита и позицией элемента управления надписью. т.е. прокрутка не работает, если я не установил атрибут данных сетки scrolledcomposite как

grabExcessVerticalspace = true

Если я позволю прокручиваемому составу захватить избыточное вертикальное пространство, метка не появится под прокручиваемым составом из-за промежутка между ними.

public class Snippet5 {

  public static void main(String[] args) {
    Display display = new Display();
    Shell shell = new Shell(display);
    shell.setLayout(new GridLayout(1, true));

    // this button is always 400 x 400. Scrollbars appear if the window is
    // resized to be too small to show part of the button
    ScrolledComposite c1 = new ScrolledComposite(shell, SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL);
    Button b1 = new Button(c1, SWT.PUSH);
    b1.setText("fixed size button");
    b1.setSize(400, 400);
    c1.setAlwaysShowScrollBars(true);
    c1.setLayoutData(new GridData(SWT.LEFT, SWT.TOP, true, true));
    c1.setContent(b1);

    Label l = new Label(shell, SWT.BORDER);
    l.setText("button clicked");
    GridData layoutData = new GridData(SWT.LEFT, SWT.TOP, true, false);
    layoutData.heightHint = 30;
    layoutData.widthHint  = 400;
    l.setLayoutData(layoutData);

    shell.setSize(600, 300);
    shell.open();
    while (!shell.isDisposed()) {
      if (!display.readAndDispatch())
        display.sleep();
    }
    display.dispose();
  }
}

Любая помощь в том, чтобы метка появлялась точно под прокручиваемым составом (обрезка пространства) и выполняла прокрутку, приветствуется.

Редактировать:

Ожидаемое поведение:

  1. Дополнительное вертикальное пространство для захвата на этикетке.
  2. Компонент scrolled composite должен включать вертикальную прокрутку, когда содержимое не может быть полностью просмотрено при изменении размера оболочки.

1 ответ

Вам необходимо установить данные макета ScrolledComposite в FILL вот так:

new GridData( SWT.FILL, SWT.FILL, true, true );

Таким образом, ScrolledComposite займет доступное пространство ячейки сетки.

Другие вопросы по тегам