这是完整的工作代码:
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
将水平调整大小,但不会垂直调整大小:
(注意底部的空白区域。)
如何使它们垂直调整大小?
答案 0 :(得分:0)
问题出在这一行:
expandItem.setHeight(group.computeSize(SWT.DEFAULT, SWT.DEFAULT).y);
计算尺寸将基于组内的控件+相关的布局信息,如边距。因此,由于您的组只包含一个标签,因此计算出的尺寸高度不能超过标签的大小。即使您添加更多控件,如果总是计算尺寸以适应所有控件而不添加任何额外空间。
你可以为computeSize方法提供高度提示。像这样:
expandItem.setHeight(group.computeSize(SWT.DEFAULT, 500).y);
否则,SWT无法了解您希望扩展项目的大小。