我正在尝试在 SashForm
内的 Group
组合中显示 SWT Tree
。 SWT 树在启动时不会填满整个 Group 组合,但一旦我重新调整 SashForm 的大小,它就会填满。我的功能正常,即树占据了整个组组合。有人可以帮我吗?
sashForm = new SashForm(parent, SWT.HORIZONTAL | SWT.SMOOTH | SWT.H_SCROLL);
sashForm.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false, 1, 1));
explainStepsGroup = new Group(sashForm, SWT.NONE);
explainStepsGroup.setText("Explain Steps");
GridData gd = new GridData(SWT.FILL,SWT.FILL,true,true);
explainStepsGroup.setLayoutData(gd);
explainStepsGroup.setLayout(new FillLayout());
tree = new Tree(explainStepsGroup, SWT.BORDER);
tree.setLayout(new FillLayout());
tree.setHeaderVisible(true);
tree.setToolTipText("Steps");
...
...
void fillTreeItems() {
TreeItem rootTreeItem = new TreeItem(tree, SWT.NULL);
rootTreeItem.setText("Steps");
rootTreeItem.setExpanded(true);
TreeItem stepNumTreeItem = null;
TreeItem stepTextItem = null;
stepList = m_explainModel.getStepText();
Iterator<String> iter = stepList.keySet().iterator();
while(iter.hasNext()) {
stepNumTreeItem = new TreeItem(rootTreeItem, SWT.NULL);
String stepNum = iter.next();
stepNumTreeItem.setText(stepNum.toString());
stepNumTreeItem.setExpanded(false);
stepTextItem = new TreeItem(stepNumTreeItem, SWT.WRAP);
stepTextItem.setText(stepList.get(stepNum));
tree.showItem(stepNumTreeItem);
}
tree.setRedraw(true);
tree.pack();
}
最佳答案
这些问题通常很难解决。您需要回答的第一个问题是:哪个控件没有调整大小?
您认为这是树,但这只是因为您看不到该组。所以也许树填满了组,但组没有填满窗框。
要做的第一件事是给所有东西一个边框或不同的背景颜色。这样,您就可以看到每个控件的位置及其大小。
这应该会给你一个想法。从代码来看,这一行是没有用的:
tree.setLayout(new FillLayout());
Tree 使用它自己的固定布局来布局它的子元素。另外,您没有为 SashForm
设置布局,因此它不会更改其子项的大小。尝试一下
sashForm.setLayout(new FillLayout());
相关:Understanding Layouts in SWT - 古老但仍然真实。
关于java - 树不占据整个父组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13580162/