有时候,比如说在显示一个TableViewer的弹出菜单时,可能对于某些行不希望显示弹出菜单,而另外的一些行则需要显示弹出菜单予以操作。今天碰到这个问题,使用了MenuListener来解决了:
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);
}
});
我隐约记得好像是有一个
menuAboutToShow()的方法,但不记得是在哪个Listener中定义的了。可以在menuAboutToShow()中定义对MenuItem进行动态的添加或者删除。
不知道是不是我记错了,哪位记得有这个方法的?
MenuListener好像也可以做这个事情,虽然在其文档中说道,当菜单已经被显示时menuShown()方法被调用,但是我在实际操作的时候,就上面的
例子来看,菜单并没有被显示出来就被setVisible(false)了,不知道是不是太快了的缘故。还是应该有menuAboutToShow()这
样的方法才对。