2014-12-08 59 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