如何在使用GridLayout时让滚动条在ScrolledComposite中工作?

时间:2016-09-13 06:58:48

标签: java swt grid-layout scrolledcomposite

我正在尝试使用具有固定大小内容的滚动复合和在可滚动内容的滚动复合显示状态信息下方的标签。由于我希望控件使用父级调整大小,我在其父级上使用了GridLayout。但是我遇到了滚动复合滚动条和标签控件定位的问题。即,除非我将scrolledcomposite的网格数据属性设置为

,否则滚动不起作用
grabExcessVerticalspace = true

如果我允许scrolledcomposite抓住多余的垂直空间,由于它们之间的空格,标签不会出现在scrolledcomposite下面。

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. 当重新调整外壳尺寸时无法完全查看内容时,scrolledcomposite应启用垂直滚动。
  3. enter image description here

1 个答案:

答案 0 :(得分:0)

您需要将ScrolledComposite的布局数据设置为FILL,如下所示:

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

这样,ScrolledComposite将占用网格单元的可用空间。