2

我想显示包含 2Tree Viewers和 one的视图Table Viewer
它看起来如下,


树浏览器1 | 树浏览器2

-------------TableViewer------------


(抱歉,由于某些限制,我无法从我的机器上传图像,但上述控件必须填满视图的整个区域)

为此,我创建了一个mainComposite,它将包含所有控件并且具有RowLayout样式SWT.VERTICAL
之后,我创建了将容纳TreeViewer1 和TreeViewer2 的顶部复合材料,并且具有Grid layout2 列。(每列将包含一个TreeViewer相应的位置。)
之后,我创建了将容纳 TableViewer 的底部复合材料,以及再次具有 1 列的网格布局。

mainComposite持有顶部和底部复合材料。顶部和底部组合需要平均共享 mainComposite 高度,并且两个组合都需要获取 mainComposite 的整个宽度。

当我运行程序时,我的控件按我想要的顺序排列。但它们并没有获得复合材料的整个宽度。(即它们进入左角)。
我尝试使用不同类型的布局,但没有帮助。

我尝试使用帖子 http://www.programcreek.com/2012/03/eclipse-rcp-tutorial-5-how-to-layout-your-view-gridlayout-example/
但对我不起作用,因为我我有表格查看器而不是文本。

任何帮助表示赞赏。

问候,
曼达尔

4

2 回答 2

0

在所有复合材料中使用 FillLayout。是一个如何使用它的小例子。重要的是设置 SWT.VERTICAL/SWT.HORIZONTAL。

于 2012-10-15T09:50:45.733 回答
0

GridLayouts您可以通过使用一组对齐设置为SWT.FILL并将两个grabExcess*Space参数设置为 true 来获得我认为您正在寻找的行为(树以及使用所有可用空间的表) 。

试试这个:

@Override
public void createPartControl(Composite parent) {
    Composite container = new Composite(parent, SWT.NONE);
    GridLayout gl_container = new GridLayout(1, false);
    gl_container.horizontalSpacing = 15;
    container.setLayout(gl_container);

    Composite mainComposite = new Composite(container, SWT.NONE);
    mainComposite.setLayout(new GridLayout(1, false));
    mainComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));

    Composite treesComposite = new Composite(mainComposite, SWT.NONE);
    treesComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
    treesComposite.setLayout(new GridLayout(2, false));

    TreeViewer leftTreeViewer = new TreeViewer(treesComposite, SWT.BORDER);
    Tree leftTree = leftTreeViewer.getTree();
    leftTree.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));

    TreeViewer rightTreeViewer = new TreeViewer(treesComposite, SWT.BORDER);
    Tree rightTree = rightTreeViewer.getTree();
    rightTree.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));

    TableViewer bottomTableViewer = new TableViewer(mainComposite, SWT.BORDER | SWT.FULL_SELECTION);
    bottomTable = bottomTableViewer.getTable();
    bottomTable.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
}

或者,您可以尝试使用FormLayouts.

在这里,我使用“分子/偏移”方法指定事物的位置。在您看到0/50/100 之类的数字时,这些数字本质上是可用空间的百分比。像5/-5这样较小的数字是从这些百分比描述的位置的偏移量,以像素为单位;它们在组件之间提供了很小的余量。

@Override
public void createPartControl(Composite parent) {
    Composite container = new Composite(parent, SWT.NONE);
    GridLayout gl_container = new GridLayout(1, false);
    gl_container.horizontalSpacing = 15;
    container.setLayout(gl_container);

    Composite mainComposite = new Composite(container, SWT.NONE);
    mainComposite.setLayout(new FormLayout());
    mainComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));

    Composite treesComposite = new Composite(mainComposite, SWT.NONE);
    FormData fd_treesComposite = new FormData();
    fd_treesComposite.bottom = new FormAttachment(50);
    fd_treesComposite.right = new FormAttachment(100);
    fd_treesComposite.top = new FormAttachment(0);
    fd_treesComposite.left = new FormAttachment(0);
    treesComposite.setLayoutData(fd_treesComposite);
    treesComposite.setLayout(new FormLayout());

    TreeViewer leftTreeViewer = new TreeViewer(treesComposite, SWT.BORDER);
    Tree leftTree = leftTreeViewer.getTree();
    FormData fd_leftTree = new FormData();
    fd_leftTree.bottom = new FormAttachment(100);
    fd_leftTree.right = new FormAttachment(50, -2);
    fd_leftTree.top = new FormAttachment(0, 5);
    fd_leftTree.left = new FormAttachment(0, 5);
    leftTree.setLayoutData(fd_leftTree);

    TreeViewer rightTreeViewer = new TreeViewer(treesComposite, SWT.BORDER);
    Tree rightTree = rightTreeViewer.getTree();
    FormData fd_rightTree = new FormData();
    fd_rightTree.bottom = new FormAttachment(100);
    fd_rightTree.right = new FormAttachment(100, -5);
    fd_rightTree.top = new FormAttachment(0, 5);
    fd_rightTree.left = new FormAttachment(50, 3);
    rightTree.setLayoutData(fd_rightTree);

    TableViewer bottomTableViewer = new TableViewer(mainComposite, SWT.BORDER | SWT.FULL_SELECTION);
    bottomTable = bottomTableViewer.getTable();
    FormData fd_bottomTable = new FormData();
    fd_bottomTable.bottom = new FormAttachment(100, -5);
    fd_bottomTable.right = new FormAttachment(100, -5);
    fd_bottomTable.top = new FormAttachment(50, 5);
    fd_bottomTable.left = new FormAttachment(0, 5);
    bottomTable.setLayoutData(fd_bottomTable);
}
于 2012-10-15T14:16:47.863 回答