Eclipse视图部件中的ExpandBar

Eclipse视图部件中的ExpandBar,eclipse,eclipse-plugin,Eclipse,Eclipse Plugin,我正在尝试向Eclipse viewpart添加扩展栏。单击展开按钮时,我希望viewpart向下移动展开栏下方的项目,并显示展开的项目。当前发生的情况是,展开栏项目刚好消失在展开栏下的项目下方。有什么想法吗 final ExpandBar expandBar = new ExpandBar(parent, SWT.NONE); expandBar.setBackground(SWTResourceManager.getColor(SWT.COLOR_WIDGET_LIGHT_SHADOW));

我正在尝试向Eclipse viewpart添加扩展栏。单击展开按钮时,我希望viewpart向下移动展开栏下方的项目,并显示展开的项目。当前发生的情况是,展开栏项目刚好消失在展开栏下的项目下方。有什么想法吗

final ExpandBar expandBar = new ExpandBar(parent, SWT.NONE);
expandBar.setBackground(SWTResourceManager.getColor(SWT.COLOR_WIDGET_LIGHT_SHADOW));
expandBar.setSpacing(0);
fd_toolBar.top = new FormAttachment(expandBar, 6);
FormData fd_expandBar = new FormData();
fd_expandBar.top = new FormAttachment(0, 62);
fd_expandBar.left = new FormAttachment(0, 3);
expandBar.setLayoutData(fd_expandBar);
formToolkit.paintBordersFor(expandBar);

final ExpandItem xpndtmWarningDetails = new ExpandItem(expandBar, SWT.NONE);
xpndtmWarningDetails.setExpanded(true);
xpndtmWarningDetails.setText("Warning Details");

final Composite composite_1 = new Composite(expandBar, SWT.NONE);
composite_1.setBackground(SWTResourceManager.getColor(SWT.COLOR_YELLOW));
xpndtmWarningDetails.setControl(composite_1);
formToolkit.paintBordersFor(composite_1);
xpndtmWarningDetails.setHeight(xpndtmWarningDetails.getControl().computeSize(SWT.DEFAULT, SWT.DEFAULT).y);

Label lblTest = new Label(composite_1, SWT.NONE);
lblTest.setBounds(10, 10, 55, 15);
lblTest.setText("Test");

expandBar.addExpandListener(new ExpandListener(){

    @Override
    public void itemCollapsed(ExpandEvent e) {
        expandBar.setSize(expandBar.getSize().x, xpndtmWarningDetails.getHeaderHeight());
        parent.layout(true);
    }

    @Override
    public void itemExpanded(ExpandEvent e) {
        expandBar.setSize(expandBar.getSize().x, 300);
        expandBar.layout(true);
        parent.layout(true);
    }

});

我认为ExpandBar在使用时效果最好,就像在这个例子中一样

。。。几个膨胀条相互叠放在一起,没有其他东西混在一起

我认为你想要的功能可以通过ExpandableComposite对象来实现。这取决于ViewPart中的其他内容

下面是一个可扩展复合材料的快速示例

package com.amx.designsuite.rcp;

import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.forms.widgets.ExpandableComposite;
import org.eclipse.ui.forms.widgets.FormToolkit;
import org.eclipse.ui.forms.widgets.ScrolledForm;
import org.eclipse.ui.forms.widgets.TableWrapLayout;

public class ExpandableCompositeExample extends Composite {

/**
 * Create the composite.
 * @param parent
 * @param style
 */
public ExpandableCompositeExample(final Composite parent, int style) {
    super(parent, style);
    FormToolkit toolkit;

    toolkit = new FormToolkit(parent.getDisplay());
    final ScrolledForm form = toolkit.createScrolledForm(parent);
    form.setText("Title for Form holding Expandable Composite (optional)");
    TableWrapLayout layout = new TableWrapLayout();
    form.getBody().setLayout(layout);

    ExpandableComposite expandableCompsite = toolkit.createExpandableComposite(form.getBody(), ExpandableComposite.TREE_NODE | ExpandableComposite.SHORT_TITLE_BAR);
    toolkit.paintBordersFor(expandableCompsite);
    expandableCompsite.setText("Expandable Composite Title (Optional)");
    expandableCompsite.setExpanded(true);

    Text txtMyNewText = toolkit.createText(expandableCompsite, "Text to show when composite is expanded", SWT.NONE);
    expandableCompsite.setClient(txtMyNewText);
}

@Override
protected void checkSubclass() {
    // Disable the check that prevents subclassing of SWT components
}
}

分享你的代码,这样就很容易理解你在说什么。这是我的代码示例。我有它,因此我视图中的其他项目会根据此栏的展开进行移动,但我的合成中的数据不会重新显示在展开栏上。我尝试使用您的代码重现您描述的问题,但您的代码中缺少阻止我这样做的内容。我试图将您的代码复制并粘贴到一个简单的复合对象的构造函数中,但是您提供的代码中没有定义变量fd_toolbar和formToolkit。我可以猜到如何定义它们,但我更想知道你在代码中是如何做到的。我让你的代码在我的基本复合对象中工作,但我没有看到你遇到的问题。我想知道你是否可以共享更多的代码,这样我就可以看到隐藏的UI部分。当扩展栏被扩展时?谢谢,这正是我想要的。