如何使ExpandItem填充所有可用的垂直空间?

时间:2015-05-19 12:25:46

标签: swt

这是完整的工作代码:

import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.*;
import org.eclipse.swt.widgets.*;

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

    ExpandBar expandBar = new ExpandBar(shell, SWT.V_SCROLL);
    expandBar.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));

    for (int i = 0; i < 3; i++) {
        Group group = new Group(expandBar, SWT.NONE);
        GridData layoutData = new GridData(GridData.FILL_BOTH);
        layoutData.minimumHeight = 225;
        layoutData.minimumWidth = 225;
        layoutData.grabExcessVerticalSpace = true;
        group.setLayoutData(layoutData);
        group.setLayout(new GridLayout());

        new Label(group, SWT.NONE).setText("Text " + i);

        ExpandItem expandItem = new ExpandItem(expandBar, SWT.NONE);
        expandItem.setControl(group);
        expandItem.setText("Group " + i);
        expandItem.setHeight(group.computeSize(SWT.DEFAULT, SWT.DEFAULT).y);
        expandItem.setExpanded(true);
    }

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

如果您运行此程序并尝试调整窗口大小,ExpandItem将水平调整大小,但不会垂直调整大小:

Screenshot

(注意底部的空白区域。)

如何使它们垂直调整大小?

1 个答案:

答案 0 :(得分:0)

问题出在这一行:

expandItem.setHeight(group.computeSize(SWT.DEFAULT, SWT.DEFAULT).y);

计算尺寸将基于组内的控件+相关的布局信息,如边距。因此,由于您的组只包含一个标签,因此计算出的尺寸高度不能超过标签的大小。即使您添加更多控件,如果总是计算尺寸以适应所有控件而不添加任何额外空间。

你可以为computeSize方法提供高度提示。像这样:

 expandItem.setHeight(group.computeSize(SWT.DEFAULT, 500).y);

否则,SWT无法了解您希望扩展项目的大小。