मुझे किसी ग्रहण प्लगइन प्रोजेक्ट में TreeViewer के लिए संदर्भ मेनू बनाने की आवश्यकता है। लेकिन, मेनू में निरंतर आइटम नहीं होना चाहिए, उन्हें चयनित नोड के प्रकार के आधार पर अलग-अलग होना चाहिए। उदाहरण के लिए, मेरी treeViewer निम्न पदानुक्रम है:चयनित नोड के आधार पर TreeViewer के लिए संदर्भ मेनू - SWT
Node A
|
--Node B
|
--Node C
नोड एक के लिए - मैं एक कार्रवाई के साथ एक मेनू दिखाने के लिए चाहते हैं, लेकिन नोड्स बी और सी के लिए मैं कुछ भी (कोई मेनू) को दिखाने के लिए नहीं करना चाहती। मैं नोड ए के लिए मेनू बनाने में कामयाब रहा, लेकिन फिर जब मैं किसी अन्य प्रकार के नोड का चयन करता हूं तो मैं इससे छुटकारा नहीं पा सकता हूं। मेरे कोड लगता है:
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 ?
}
}
}
}
);
किसी और शाखा पर मैं MenuManager पर dispose()
, removeAll()
कॉल करने की कोशिश ... कुछ भी नहीं काम करता है!
किसी भी मदद की सराहना की है, धन्यवाद।
युक्तियों के लिए धन्यवाद, अब मैं एक बार मेनू बना रहा हूं और फिर चयन के मामले में, मैं action.setEnabled (false) को कॉल करता हूं। यह ठीक काम करता है, लेकिन मुझे कार्रवाई के लिए एक सेट दृश्य विधि नहीं मिली। मैं इसे छिपाना चाहूंगा जब कुछ अन्य नोड को ग्रेइंग करने के बजाय चुना जाता है। धन्यवाद – AndaP
यदि आप 'एक्शन कंट्रोल्यूशनइटम' जोड़ते हैं जिसमें आपके कार्य होते हैं, तो उनके पास 'सेट विज़िबल (बूलियन)' विधि होती है। लेकिन आपको 'setRemoveAllWhenShown (*) 'या' ActionContributionItems' की दृश्यता को अपडेट करना चाहिए क्योंकि वे अलग-अलग दृष्टिकोण हैं। –