我有一个 TreePanel,它按层次显示不同类型的对象。地区、城市、地点...
我希望能够在不同级别显示不同的上下文菜单项。例如:miR 代表区域,miC 代表城市,miL 代表位置... 我使用这个片段来实现动态结构:
contextMenu.addListener(Events.BeforeShow, new Listener<MenuEvent>() {
@Override
public void handleEvent(MenuEvent be) {
//First make all menu items invisible
List<Component> menuItems = contextMenu.getItems();
for (Component c : menuItems) {
c.setVisible(false);
}
//And make apprepriate menu items visible
TopologyTreeElement s = tree.getSelectionModel().getSelectedItem();
if (s instanceof TopologyTreeElement.Region) {
miR.setVisible(true);
}
if (s instanceof TopologyTreeElement.City) {
miC.setVisible(true);
}
}
});
但是,在任何级别中,如果所有项目都是不可见的,它会显示一个空框。我希望它不完全显示菜单。我尝试将此代码片段添加到该方法中,但没有提供任何帮助。
//Do not show menu if no menu item is invisible
boolean isMenuShouldBeVisible = miC.isVisible() || miR.isVisible();
if (!isMenuShouldBeVisible) {
be.preventDefault();
be.stopEvent();
}
有人可以提出不同的方法吗?
最佳答案
由于您正在监听 BeforeShow
事件,因此您可以取消该事件并停止实际 Show
事件的发生。检查是否所有项目都是不可见的,如果是,则调用 be.setCancelled(true)
。
任何在 Before
中开始的事件都可以用来取消后面的事件 - 这就是这些 before- 事件存在的原因。
关于java - 如何防止 GXT 中显示空上下文菜单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16686879/