我正在开发用于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); } 

最终布局图

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

期望:由于innerContainer太大而无法容纳父对象,因此应该有滚动条。

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

我该如何解决这个问题?

===============>>#1 票数:1 已采纳

  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.setSizeinnerContainer.setSize

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

  ask by user3340459 translate from so

本文未有回复,本站智能推荐: