无法调整SWT组件的大小(TextMergeViewer)

时间:2016-05-30 08:38:18

标签: java eclipse eclipse-plugin swt

这是我的问题:我一直在使用SWT为Eclise插件构建一个小GUI。在下图中,部分1,2,2',3,3'我完全按照自己的意愿行事,并且正确地适合窗口。

Sample screenshot of what the GUI could look like

但是,第四部分(它是一个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文件不负责任,但我找不到代码中的错误。 任何帮助,将不胜感激 ! 谢谢你的阅读。

1 个答案:

答案 0 :(得分:2)

您需要将GridData设置为Control的{​​{1}}:

TextMergeViewer

另外,作为注释:不要重用tmv.getControl().setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); 个对象。每个小部件都应该有自己的GridData

Reference

  

注意:不要重复使用GridData对象。由GridLayout管理的Composite中的每个控件都必须具有唯一的GridData对象。