Eclipse SWT ScrolledComposite拒绝滚动

问题描述 投票:0回答:1

我正在开发一个用于eclipse的插件,我正在努力使用ScrolledComposite并使其占用剩余空间。

父布局是一个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);
}

Picture of resulting layout

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

期望:由于innerContainer太大,无法放入父级,因此应该有滚动条。

实际发生的事情:没有滚动条。

如何解决此问题?

java eclipse scroll swt scrolledcomposite
1个回答
0
投票
  1. GridData上的ScrolledComposite需要将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));
    
© www.soinside.com 2019 - 2024. All rights reserved.