我想显示包含2 Tree Viewers
和1 Table Viewer
的视图
它将如下所示,
(抱歉,由于某些限制我无法从我的机器上传图片,但上述控件必须填满整个视图区域)
为此,我创建了一个mainComposite
,其中包含所有控件,其中RowLayout
具有SWT.VERTICAL
样式。
在那之后,我创建了顶部复合,其中包含TreeViewer
1和TreeViewer
2,其中Grid layout
包含2列。(其中每列将包含一个TreeViewer
} res。)
之后我创建了底部复合材料,它将持有TableViewer,并且再次具有1列的网格布局。
mainComposite
拥有顶部和底部合成。顶部和底部复合材料需要均匀地共享mainComposites高度,并且两个复合体都需要获取mainComposite的整个宽度。
当我运行程序时,我的控件按照我想要的顺序排列。但是它们没有获取复合材料的整个宽度。(即它们是左下角)。
我尝试使用不同类型的布局,但没有帮助。
我试过这个帖子 http://www.programcreek.com/2012/03/eclipse-rcp-tutorial-5-how-to-layout-your-view-gridlayout-example/但由于我有桌面查看器而不是文本,因此对我无效。
感谢任何帮助。
的问候,
Mandar
答案 0 :(得分:0)
在所有复合材料中使用FillLayout。 Here是一个如何使用它的小例子。重要的是设置SWT.VERTICAL / SWT.HORIZONTAL。
答案 1 :(得分: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);
}