我需要一個Eclipse插件項目,以創建一個TreeViewer中的上下文菜單。但是,菜單不應該包含常量項目,它們應該根據所選節點的類型而有所不同。例如,我的TreeViewer中有以下層次:上下文菜單 - SWT
Node A
|
--Node B
|
--Node C
對於節點A - 我想顯示有動作的菜單,但節點B和C,我不希望任何顯示(無菜單)。 我設法創建節點A的菜單,但後來選擇了一些其他類型的節點時,我無法擺脫它。我的代碼如下所示:
treeViewer.addSelectionChangedListener(
new ISelectionChangedListener(){
public void selectionChanged(SelectionChangedEvent event) {
if(event.getSelection() instanceof IStructuredSelection) {
IStructuredSelection selection = (IStructuredSelection)event.getSelection();
Object o = selection.getFirstElement();
MenuManager menuMgr = new MenuManager();
if (o instanceof NodeA){
Menu menu = menuMgr.createContextMenu(treeViewer.getControl());
treeViewer.getControl().setMenu(menu);
getSite().registerContextMenu(menuMgr, treeViewer);
menuMgr.add(new SomeAction());
}else {
//what ?
}
}
}
}
);
在else分支我試着打電話給dispose()
,removeAll()
在MenuManager ...沒有什麼工作!
任何幫助表示讚賞,謝謝。
謝謝你的提示,現在我創建菜單一次,然後在選擇的情況下,我打電話action.setEnabled(假)。這工作正常,但我沒有找到一個Action的setVisible方法。我想在選擇其他節點而不是灰色時隱藏它。謝謝 – AndaP 2011-06-02 17:28:08
如果您添加包含您的操作的ActionContributionItems,它們有一個'setVisible(boolean)'方法。但是你應該選擇'setRemoveAllWhenShown(*)'或更新'ActionContributionItems'的可見性,因爲它們是不同的方法。 – 2011-06-03 01:56:10