为什么在Eclipse 3.2插件中添加项目会混淆工具栏?

时间:2015-07-07 16:27:56

标签: java eclipse-plugin eclipse-rcp jface

我正在开发一个增强功能,可以将按钮添加到Eclipse插件的工具栏中。这项技术相当陈旧。我正在使用IBM Rational Application Developer 7.0.10。这是我看到的版本

JDK 1.5
Eclipse Platform 3.2.2
Eclipse Plugin Development 3.2.1
Eclipse RCP 3.2.2

当我的代码向工具栏添加一个新按钮时,它会弄乱工具栏。它只显示一些按钮并隐藏其余按钮。但是当我调整视图时,即使是最轻微的一点,所有按钮都显示出来。它似乎不是屏幕空间的情况,因为使视图更大没有帮助。我是Eclipse插件开发的新手,所以我不确定是什么原因造成的。我似乎正在做添加按钮所需的操作。我尝试过不同的东西,比如insertBefore而不是add等等。但似乎没有任何帮助。

我写了一些测试代码(使用Eclipse附带的示例插件)来隔离问题,但我没有成功。我给了2个类的代码。

// This class is generated from Elipse, to which I have added code
public class MenuBarTestView extends ViewPart {

    // Instance variables ...

   public void createPartControl(Composite parent) {
       viewer = new TreeViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL);
       drillDownAdapter = new DrillDownAdapter(viewer);
       viewer.setContentProvider(new ViewContentProvider());
       viewer.setLabelProvider(new ViewLabelProvider());
       viewer.setSorter(new NameSorter());
       viewer.setInput(getViewSite());

       // Selection change listener, which adds a button to tool bar
       // I added the following line
       viewer.addSelectionChangedListener(new TreeSelectionChangedListener(this));

       makeActions();
       hookContextMenu();
       hookDoubleClickAction();
       contributeToActionBars();
   }

   .
   .  // Other Eclipse generated code for the sample plugin goes here
   .
   .

   // I added this method to add a button
   public void addButton () {

       IActionBars bars = getViewSite().getActionBars();
       IToolBarManager tbm = bars.getToolBarManager();

       Action action = new Action() {
          public void run() {
              showMessage("Action 1 executed");
          }
      };
      action.setImageDescriptor(PlatformUI.getWorkbench().getSharedImages().
            getImageDescriptor(ISharedImages.IMG_OBJ_FOLDER));
      tbm.add(action);
      tbm.update(false);

   }
}

我为选择更改事件编写了以下类

package menubartest.views;

import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.SelectionChangedEvent;

public class TreeSelectionChangedListener implements ISelectionChangedListener {

    private MenuBarTestView view;

    public TreeSelectionChangedListener(MenuBarTestView view) {
        super();
        this.view = view;
    }

    public void selectionChanged(SelectionChangedEvent event) {
        // TODO Auto-generated method stub
        view.addButton();
    }
}

申请出现时

This is when application first comes up

这是在树上的选择

enter image description here

这是在经历了如此轻微的调整后

enter image description here

有人可以帮忙吗?

2 个答案:

答案 0 :(得分:0)

在添加到工具栏后,您似乎需要调用IActionBars.updateActionBars()方法。

答案 1 :(得分:0)

这似乎是Eclipse 3.2(或至少与RAD 7.0捆绑在一起的版本)的错误。我用Eclipse 3.7尝试过这个并没有看到问题。