0

我正在尝试Tree在. SWT 树在启动时并没有填满整个 Group 组合,但是一旦我重新调整 SashForm 的大小,它就会填满。我得到了正确的功能,即树占据了整个 Group 组合。谁能帮帮我?GroupSashForm

    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();

}
4

2 回答 2

1

您没有GridDataTree. 试试下面的示例代码:

public class Dummy
{
    public static void main(String[] args)
    {
        Display display = new Display();
        Shell shell = new Shell(display);
        shell.setText("Dummy window");
        shell.setLayout(new GridLayout(1, false));

        SashForm sashForm = new SashForm(shell, SWT.HORIZONTAL | SWT.SMOOTH | SWT.H_SCROLL);
        sashForm.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));

        Group firstGroup = new Group(sashForm, SWT.NONE);
        firstGroup.setText("Upper");
        firstGroup.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
        firstGroup.setLayout(new GridLayout(1, false));

        Tree tree = new Tree(firstGroup, SWT.BORDER);
        tree.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
        tree.setHeaderVisible(true);
        tree.setToolTipText("Steps");

        fillTreeItems(tree);

        Group secondGroup = new Group(sashForm, SWT.NONE);
        secondGroup.setText("Lower");
        secondGroup.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
        secondGroup.setLayout(new GridLayout(1, false));

        Tree secondTree = new Tree(secondGroup, SWT.BORDER);
        secondTree.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
        secondTree.setHeaderVisible(true);
        secondTree.setToolTipText("Steps");

        fillTreeItems(secondTree);

        shell.pack();
        shell.setSize(400, 200);
        shell.open();
        while (!shell.isDisposed())
        {
            if (!display.readAndDispatch())
                display.sleep();
        }
        display.dispose();
    }

    private static void fillTreeItems(Tree tree)
    {
        TreeItem rootTreeItem = new TreeItem(tree, SWT.NULL);
        rootTreeItem.setText("Steps");
        rootTreeItem.setExpanded(true);

        TreeItem item = new TreeItem(rootTreeItem, SWT.NULL);
        item.setText("item");
        item.setExpanded(false);

        tree.pack();
    }
}

这是启动后的样子:

在此处输入图像描述

移动后Sash

在此处输入图像描述

于 2012-11-27T08:58:16.543 回答
1

这些问题通常很难弄清楚。您需要回答的第一个问题是:哪个控件没有调整大小?

您假设它是树,但这只是因为您看不到该组。因此,也许树正在填充组,但组没有填充窗扇。

首先要做的是给所有东西一个边框或一个独特的背景颜色。这样,您就可以看到每个控件的位置和大小。

那应该给你一个想法。从代码来看,这一行是没用的:

tree.setLayout(new FillLayout());

树使用它自己的固定布局来布置它的孩子。此外,您没有为 设置布局SashForm,因此它不会更改其子项的大小。尝试

sashForm.setLayout(new FillLayout());

按照这个例子

相关:了解 SWT 中的布局- 旧但仍然正确。

于 2012-11-27T08:51:24.630 回答