Eclipse SWT ScrolledComposite 拒绝滚动

Eclipse SWT ScrolledComposite refuses to scroll

我正在为 eclipse 开发一个插件,我正在努力使用 ScrolledComposite 以及让它占用剩余的 space。

父布局是 2 列网格:

@Override
public void createPartControl(Composite parent) {
    parent.setLayout(new GridLayout(2, false));
    // other views etc
}

ScrolledComposite 是这样创建的(略有缩写):

private void fillScroll() {
    if (scroll != null) {
      scroll.dispose();
    }
    scroll = new ScrolledComposite(parent, SWT.V_SCROLL | SWT.H_SCROLL | SWT.BORDER);

    GridData gd = new GridData();
    gd.horizontalSpan = 2;
    scroll.setLayoutData(gd);

    Composite innerContainer = new Composite(scroll, 0);
    innerContainer.setLayout(new GridLayout(1, false));

    // for loop that adds widgets to innerContainer

    scroll.setExpandHorizontal(true);
    scroll.setExpandVertical(true);
    scroll.setContent(innerContainer);
    scroll.setSize(innerContainer.computeSize(SWT.DEFAULT, SWT.DEFAULT));

    parent.layout(true);
}

问题列表是在 for 循环中添加的小部件,由 innerContainer 包含。

预期:由于innerContainer 父级放不下,所以应该有滚动条。

实际情况:没有滚动条。

我该如何解决这个问题?

  1. ScrolledComposite 上的 GridData 需要将 grabExcessVerticalSpace 设置为 true。我建议你使用扩展构造函数来明确定义它应该如何显示,例如:

    GridData gd = new GridData(SWT.FILL, SWT.FILL, true, true, 2, 1);
    
  2. 选项 A:将 scroll.setSize 更改为 scroll.setMinSize

    scroll.setMinSize(innerContainer.computeSize(SWT.DEFAULT, SWT.DEFAULT));
    

    或者,选项 B:删除 scroll.setExpandHorizontalscroll.setExpandVertical 并将 scroll.setSize 更改为 innerContainer.setSize:

    innerContainer.setSize(innerContainer.computeSize(SWT.DEFAULT, SWT.DEFAULT));