Java 替换Jface弹出菜单中的菜单项

Java 替换Jface弹出菜单中的菜单项,java,eclipse,eclipse-plugin,jface,treeviewer,Java,Eclipse,Eclipse Plugin,Jface,Treeviewer,我想在JFace的TreeViewer中显示一个弹出菜单 菜单应包含3个永不更改的常量菜单项,以及根据所选树节点的不同而变化的附加项 一个选项是使用setRemoveAllWhenShowntrue,但每次都会删除所有菜单项,包括常量项 我想避免这种情况 因此,结束我的任务: 如果在树上使用鼠标右键单击而不选择任何节点,则只显示常量项。 如果在特定节点上使用鼠标右键单击,则显示常量项删除以前的附加项(如果存在)并为此节点添加附加项如果此选项可用,也可以替换。 到目前为止,我的代码是: //Add

我想在JFace的TreeViewer中显示一个弹出菜单

菜单应包含3个永不更改的常量菜单项,以及根据所选树节点的不同而变化的附加项

一个选项是使用setRemoveAllWhenShowntrue,但每次都会删除所有菜单项,包括常量项

我想避免这种情况

因此,结束我的任务:

如果在树上使用鼠标右键单击而不选择任何节点,则只显示常量项。 如果在特定节点上使用鼠标右键单击,则显示常量项删除以前的附加项(如果存在)并为此节点添加附加项如果此选项可用,也可以替换。 到目前为止,我的代码是:

//Add Some Actions
menuManager.add(..);
menuManager.add(..);
menuManager.add(..);
menuManager.add(new Separator());

//This will delete all items inluding the constant, I want to avoid that        
//menuManager.setRemoveAllWhenShown(true);

menuManager.addMenuListener(new IMenuListener() {           
  public void menuAboutToShow(IMenuManager manager) {
    IStructuredSelection selection = (IStructuredSelection) mTreeViewer.getSelection();
    if (!selection.isEmpty()) {
          BaseItm selected = (BaseItm) selection.getFirstElement();

          if (selected instanceof sometype) {                                                             
             //Remove additional item IF exists
             manager.add(sepcificActionForThisNode);
          }         
    }
 }                      
});

添加所有操作并使用javax.swing.JComponentsetVisibleboolean

用于设置自定义操作的唯一ID,以便以后可以使用删除这些操作。

操作没有setVisible方法,您的意思是我应该使用ActionContributionItem吗?无论如何,我必须隐藏所有以前的项目,每次都显示需要一个,对吗?如果我有20个特定的菜单项,这又是一个问题,每次单击树中的项目时,我都必须:1隐藏以前可见的项目,我必须将其存储在某个位置2通过manage.getItems循环,并找到显示JEP ActionContributionItem的操作。但是setRemoveAllWhenShowntrue对我来说也很好。太便宜了。你担心什么?