在Jface弹出菜单中替换菜单项

时间:2011-10-19 13:55:01

标签: java eclipse eclipse-plugin jface treeviewer

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

菜单应包含3个永不更改的常量菜单项,以及根据单击(选定)的树节点而变化的其他项。

一个选项是使用setRemoveAllWhenShown(true),但这会删除所有菜单项,每次都包含常量项。

我想避免这种情况。

所以结束我的任务:

  • 如果在没有选择任何节点的情况下右键单击树,则只显示常量项。
  • 如果在特定节点上使用右键单击,则显示常量项(如果存在则删除上一个附加项)并为该节点添加其他项(如果此选项可用,也可以替换它)。

到目前为止我的代码:

//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);
          }         
    }
 }                      
});

2 个答案:

答案 0 :(得分:0)

添加所有操作并使用javax.swing.JComponent#setVisible(boolean)

答案 1 :(得分:0)

使用IAction.setId(String id)为自定义操作设置唯一ID,以便稍后可以使用IMenuManager.remove(String id)删除这些操作。