2014-12-08 125 views
1

我已经使用JFace创建了TreeViewer,但现在我必须向节点添加一个右键单击侦听器。当右键点击完成它表明类似的菜单:如何为jface treeviewer创建鼠标右键菜单

  1. 做一些
  2. 什么都不做
  3. 删除

我试图做到这一点如下,但它是扔空指针异常。

MenuManager menuMgr = new MenuManager(); 
     menuMgr.setRemoveAllWhenShown(true); 

     menuMgr.addMenuListener(new IMenuListener() { 
      @Override 
      public void menuAboutToShow(IMenuManager menuManager) { 

       IContributionManager menu = null; 
       MenuItem[] items = (MenuItem[]) menu.getItems(); 
       for (int i = 0; i < items.length; i++) 
        items[i].dispose(); 

       MenuItem itemCollectionFolder = new MenuItem((Menu) menu, SWT.NONE); 
       itemCollectionFolder.setText("Add Something"); 

       MenuItem itemNewTestCase = new MenuItem((Menu) menu, SWT.NONE); 
       itemNewTestCase.setText("Do Nothing"); 

      } 
     }); 

     Control tree = treeViewer.getControl(); 

     Menu menu = menuMgr.createContextMenu(tree); 

     tree.setMenu(menu); 

回答

3

试试这个,不要忘记调用: createContextMenu(观众);

/** 
* Creates the context menu 
* 
* @param viewer 
*/ 
protected void createContextMenu(Viewer viewer) { 
    MenuManager contextMenu = new MenuManager("#ViewerMenu"); //$NON-NLS-1$ 
    contextMenu.setRemoveAllWhenShown(true); 
    contextMenu.addMenuListener(new IMenuListener() { 
     @Override 
     public void menuAboutToShow(IMenuManager mgr) { 
      fillContextMenu(mgr); 
     } 
    }); 

    Menu menu = contextMenu.createContextMenu(viewer.getControl()); 
    viewer.getControl().setMenu(menu); 
} 

/** 
* Fill dynamic context menu 
* 
* @param contextMenu 
*/ 
protected void fillContextMenu(IMenuManager contextMenu) { 
    contextMenu.add(new GroupMarker(IWorkbenchActionConstants.MB_ADDITIONS)); 

    contextMenu.add(new Action("Do Something") { 
     @Override 
     public void run() { 
      // implement this 
     } 
    }); 
    contextMenu.add(new Action("Do Nothing") { 
     @Override 
     public void run() { 
      // don't do anything here 
     } 
    }); 
    contextMenu.add(new Action("Delete") { 
     @Override 
     public void run() { 
      // implement this 
     } 
    }); 
} 

为了得到TreeViewer中的选择的元素,这样做:

IStructuredSelection selection = (IStructuredSelection) viewer.getSelection(); 
selection.getFirstElement(); 
selection.toList(); // or if you handle multi selection 
+0

当我导入org.eclipse.ui的进口包IWorkbenchActionConstants并运行代码,它抛出的错误,因为没有应用程序ID已被发现,所以这是适合的包,因为我正在使用e4 application @ flavio.donze – 2014-12-08 10:10:54

+0

您实际上可以删除这一行,它用于通过扩展点来扩展您的菜单与动作/命令。我不认为你需要这个功能。 – 2014-12-08 10:28:13

+0

你能告诉我如何为这个上下文菜单添加子上下文菜单,并且对于该子上下文菜单用户应该能够输入一些值。因此,如何创建一个新的@ flavio.donze – 2014-12-08 12:16:33