有時(shí)候,比如說(shuō)在顯示一個(gè)TableViewer的彈出菜單時(shí),可能對(duì)于某些行不希望顯示彈出菜單,而另外的一些行則需要顯示彈出菜單予以操作。今天碰到這個(gè)問(wèn)題,使用了MenuListener來(lái)解決了:
menu.addMenuListener(new MenuAdapter() {
public void menuShown(MenuEvent e) {
ISelection selection = tableTreeViewer.getSelection();
IStructuredSelection ss = (IStructuredSelection) selection;
Object firstElement = ss.getFirstElement();
if (firstElement instanceof IAttributeCatagory)
menu.setVisible(false);
}
});
我隱約記得好像是有一個(gè)
menuAboutToShow()的方法,但不記得是在哪個(gè)Listener中定義的了。可以在menuAboutToShow()中定義對(duì)MenuItem進(jìn)行動(dòng)態(tài)的添加或者刪除。
不知道是不是我記錯(cuò)了,哪位記得有這個(gè)方法的?
MenuListener好像也可以做這個(gè)事情,雖然在其文檔中說(shuō)道,當(dāng)菜單已經(jīng)被顯示時(shí)menuShown()方法被調(diào)用,但是我在實(shí)際操作的時(shí)候,就上面的
例子來(lái)看,菜單并沒(méi)有被顯示出來(lái)就被setVisible(false)了,不知道是不是太快了的緣故。還是應(yīng)該有menuAboutToShow()這
樣的方法才對(duì)。