java - 如何防止 GXT 中显示空上下文菜单

标签 java gwt contextmenu gxt

我有一个 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/

相关文章:

java - UnsatisfiedLinkError : Couldn't load sinch-android-rtc from loader dalvik. 系统

java - TrueZip 创建虚拟目录而不是存档

java - IntelliJ 中的命令行,调试/配置中的程序参数字段,如何构造它们?

java - 智能 GWT 应用程序不显示任何内容,因为找不到 nocache.js 文件错误

javascript - Angularjs - 表格单元格上的上下文菜单

javascript - Safari/OS X 上的上下文菜单通过单击打开它而关闭

java - Java Swing 应用程序与 Netbeans 平台 Swing 之间的区别

java - 在 Apache Tomcat 上部署 GWT 应用程序

java - 如何将谷歌应用程序引擎数据存储中的数据获取到客户端的 Angular js中?

javascript - 如何获取表中调用行的第一列值?