这是我的问题:我一直在使用SWT为Eclise插件构建一个小GUI。在下图中,部分1,2,2',3,3'我完全按照自己的意愿行事,并且正确地适合窗口。
但是,第四部分(它是一个TextMergeViewer)在容器的角落保持它的小尺寸。
以下代码显示了我如何定义部分2和2' :
Composite viewersContainer;
viewersContainer = new Composite(shell, SWT.BORDER);
viewersContainer.setLayout(new GridLayout(2, false));
viewersContainer.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
data = new GridData(SWT.FILL, SWT.FILL, true, true);
data.heightHint = 400;
data.widthHint = 400;
oldFileViewer = new Browser(viewersContainer, SWT.BORDER);
oldFileViewer.setText("here is the old file viewer\t\t\t\t\t\t\t\t\t\n\n\n\n\n\n");
oldFileViewer.setLayoutData(data);
newFileViewer = new Browser(viewersContainer, SWT.BORDER);
newFileViewer.setText("and here is the new file viewer\t\t\t\t\t\t\t\t\t\n\n\n\n\n\n");
newFileViewer.setLayoutData(data);
我尝试在创建第4部分时保留该模型,使用以下代码:
Composite c = new Composite(shell, SWT.BORDER);
c.setLayout(new GridLayout(1, false));
GridData l = new GridData(SWT.FILL, SWT.FILL, false, false);
c.setLayoutData(l);
TextMergeViewerCreator tmvc = new TextMergeViewerCreator();
TextMergeViewer tmv = null;
tmv = (TextMergeViewer) tmvc.createViewer(c, new CompareConfiguration());
DiffNode d = null;
try {
d = (DiffNode) (new CompareInput().prepareInput(new IProgressMonitor() {
//Some overrided methods
}
}));
} catch (InvocationTargetException | InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
d.setDontExpand(false);
tmv.setInput(d);
我猜DiffNode对TextMergeViewer文件不负责任,但我找不到代码中的错误。 任何帮助,将不胜感激 ! 谢谢你的阅读。
答案 0 :(得分:2)
您需要将GridData
设置为Control
的{{1}}:
TextMergeViewer
另外,作为注释:不要重用tmv.getControl().setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
个对象。每个小部件都应该有自己的GridData
。
注意:不要重复使用GridData对象。由GridLayout管理的Composite中的每个控件都必须具有唯一的GridData对象。