我想显示包含两个Tree Viewers和一个Table Viewer的视图。
看起来会是这样,
TreeViewer1 x- TreeViewer2
(抱歉,由于一些限制,我无法从机器上传图像,但是上面的控件必须填充视图的整个区域)
为此,我创建了一个mainComposite,它将保存所有控件,并具有具有SWT.VERTICAL样式的RowLayout。
在此之后,我创建了将容纳TreeViewer1和TreeViewer2的顶级复合,并且有两个列的Grid layout (其中每个列将包含一个TreeViewer resp)。
在此之后,我创建了底部组合,它将容纳TableViewer,并且再次具有带有1列的网格布局。
mainComposite持有顶部和底部的复合。顶部和底部组合需要平均共享mainComposites高度,这两个组合都需要获得mainComposite的整个宽度。
当我运行这个程序时,我的控件是按照顺序排列的,因为我want.But它们没有获得复合的全部宽度。(也就是说,它们是在左角)。
我试过使用不同类型的布局,但没有帮助。
我试过http://www.programcreek.com/2012/03/eclipse-rcp-tutorial-5-how-to-layout-your-view-gridlayout-example/的帖子
但没有为我工作,因为我有表查看器,而不是文字。
任何帮助都是非常感谢的。
致以敬意,
曼达尔
发布于 2012-10-15 14:16:47
您可以通过使用一组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-15 09:50:45
用于所有复合FillLayout。这里是一个如何使用它的小例子。重要的是设置SWT.VERTICAL/SWT.HORIZONTAL。
https://stackoverflow.com/questions/12890713
复制相似问题