Eclipse UI:TableWrapLayout中的节标题

时间:2012-08-20 15:06:42

标签: java layout swt eclipse-rcp jface

我在编辑器中有两个部分,使用TableWrapLayout并排排列。正如您在下面的屏幕截图中看到的那样,右侧部分的标题不使用整个宽度。展开时,该部分的标题和内容都使用整个宽度。当该部分再次关闭时,它会保持这种状态。因此,只有在打开编辑器时才会出现问题。

那么,我如何让截面部分使用全宽? 我已将TableWrapData的grabHorizontal属性设置为true,并在基础合成上使用GridData.FILL_HORIZONTAL

当然,将该部分设置为立即扩展可以解决问题,但我想最初保持关闭,因为加载该部分的内容会产生一些沉重的后端内容,因此会导致更长的加载时间。编辑器。

Editor

编辑的代码:

public void createPartControl(Composite parent) {
    toolkit = new FormToolkit(parent.getDisplay());

    form = toolkit.createScrolledForm(parent);
    form.setLayoutData(new GridData(GridData.FILL_BOTH));

    toolkit.decorateFormHeading(form.getForm());

    TableWrapLayout layout = new TableWrapLayout();
    layout.numColumns = 2;
    form.getBody().setLayout(layout);

    createMetaInfoSection();
    createUpdateDocumentSection();  
}

private void createMetaInfoSection() {
    Section metaInfoSection = toolkit.createSection(form.getBody(), Section.DESCRIPTION | Section.TITLE_BAR | Section.TWISTIE | Section.EXPANDED);
    TableWrapData twd = new TableWrapData();
    twd.grabHorizontal = true;
    twd.colspan = 1;
    metaInfoSection.setLayoutData(twd);

    // Composite
    Composite composite = toolkit.createComposite(metaInfoSection);
    GridLayout gridLayout = new GridLayout();
    composite.setLayout(gridLayout);
    composite.setLayoutData(new GridData(GridData.FILL_BOTH));

    // Content
    ...

    metaInfoSection.setClient(composite);
}

private void createUpdateDocumentSection() {
    Section updateDocumentSection = toolkit.createSection(form.getBody(), Section.DESCRIPTION | Section.TITLE_BAR | Section.TWISTIE | Section.EXPANDED);
    TableWrapData twd = new TableWrapData();
    twd.grabHorizontal = true;
    twd.colspan = 1;
    updateDocumentSection.setLayoutData(twd);

    // Composite
    Composite composite = toolkit.createComposite(updateDocumentSection);
    GridLayout gridLayout = new GridLayout();
    composite.setLayout(gridLayout);
    composite.setLayoutData(new GridData(GridData.FILL_BOTH));

    // Content
    ...

    updateDocumentSection.setClient(composite);
}

1 个答案:

答案 0 :(得分:2)

试试这个

TableWrapData twd = new TableWrapData(TableWrapData.FILL_GRAB);