调整编辑器大小时,树查看器会调整大小

时间:2014-02-07 10:44:53

标签: eclipse eclipse-plugin swt

在我的Eclipse插件中,我有一个带有树查看器的编辑器(具体说它是FilteredTree)。最初,查看器的大小适合父组合。

当我在查看器中扩展一些节点并且子节点数量达到高以在查看器中显示所有节点时,查看器变得可滚动,这是可以的。

我的问题是,当我调整整个编辑器部分的大小时,观察者会垂直扩展(水平也是如此,因此它足以显示所有元素并且滚动条消失。如何避免调整查看器的大小?

编辑:
有些人要求详细说明实施: 我将GridLayout用于查看器本身以及上面的所有容器。 编辑器是一个简单的多页编辑器。以下是有问题的页面类实现的片段:

public class MyPage extends FormPage {  
[...]
  @Override
  protected void createFormContent(IManagedForm managedForm) {
    FormToolkit toolkit = managedForm.getToolkit();
    ScrolledForm form = managedForm.getForm();
    Composite body = form.getBody();
    toolkit.decorateFormHeading(form.getForm());
    toolkit.paintBordersFor(body);

    fBlock = new MyMasterDetailsBlock();
    fBlock.createContent(managedForm);
  }
}  

MyMasterDetailsBlock类继承自MasterDetailsBlock

public class ModelMasterDetailsBlock extends MasterDetailsBlock{
  [...]
  @Override
  protected void createMasterPart(IManagedForm managedForm, Composite parent) {
    fToolkit = managedForm.getToolkit();
    fMasterSection = fToolkit.createSection(parent, ExpandableComposite.EXPANDED|ExpandableComposite.TITLE_BAR);
    fMasterSectionPart = new SectionPart(fMasterSection, fToolkit, 0);
    GridData masterSectionGridData = new GridData(SWT.FILL, SWT.FILL, false, true);
    fMasterSection.setLayoutData(masterSectionGridData);
    createTreeEditorBlock();
  }

  private void createTreeEditorBlock() {
    fMainComposite = new Composite(fMasterSection, SWT.FILL);
    fMainComposite.setLayout(new GridLayout(1, false));
    fToolkit.adapt(fMainComposite);
    fToolkit.paintBordersFor(fMainComposite);
    fMasterSection.setClient(fMainComposite);
    FilteredTree filteredTree = new FilteredTree(composite, SWT.BORDER, new patternFilter(), true);
    fTreeViewer = filteredTree.getViewer();
    Tree tree = fTreeViewer.getTree();
    tree.setLayout(new GridLayout(1, false));
    tree.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
    fToolkit.paintBordersFor(tree);
  }
}

1 个答案:

答案 0 :(得分:1)

创建树时,您要将树的布局数据设置为:

tree.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));

这告诉布局你希望树填满所有空间。如果您希望树是固定大小,则需要使用以下内容:

GridData data = new GridData(SWT.TOP, SWT.LEFT, false, false);
data.widthHint = 200;
data.heightHint = 300;
tree.setLayoutData(data);

您可以在其中选择宽度和高度提示值。