重寫isEnabled()
方法MenuManager
沒有任何效果。你可以做的是獲得相關的MenuItem
並嘗試禁用它。
首先,你添加IMenuListener
到您的「上下文菜單」管理器來訪問相關Menu
:
public void menuAboutToShow(IMenuManager manager) {
manager.getMenu().addListener(SWT.Show, showContextMenuListener);
}
在監聽你發現你的子菜單管理相匹配的MenuItem
:
public void handleEvent(Event event) {
for (MenuItem item: ((Menu)event.widget).getItems())
//MenuItem data should be our MenuManager
if (item.getData().equals(subMenu)) {
//Disable the sub-menu item
item.setEnabled(false);
//Add listener to sub-menu (see comments below the code block)
item.getMenu().addListener(SWT.Show, showSubMenuListener);
}
}
問題在於MenuManager
類中有一個錯誤修復代碼,一旦它被點擊(如果它包含任何項目),它將重新啓用子菜單項。要覆蓋這一點,你還需要SWT.Show
監聽器添加到子菜單時,菜單點擊後變得可見,將更新的子菜單項的啓用:
public void handleEvent(Event event) {
((Menu)event.widget).getParentItem().setEnabled(false);
}
你測試過了嗎? –
我該怎麼做? – kenny
@TonnyMadsen你說得對,isEnabled()在那裏是沒用的方法... –