0

例如,我有一个TreeGrid并且我已经将一个添加ContextMenuTreeGrid. 现在我只想ContextMenu在用户右键单击叶节点时绘制。我的想法是检测何时将ContextMenu要绘制并检查右键单击的节点是否为叶节点:

  • 如果节点是叶子,则绘制ContextMenu
  • 如果节点不是叶子,则取消抽奖

但是什么事件处理组件的绘制?

更新:

showContextMenuHandler行不通的。实际上这是一个SmartGWT错误,因为如果我说 contextMenu.show(),我实际上得到了 2 个上下文菜单:一个来自SmartGWT(我制作的那个),第二个来自浏览器,其中包含诸如(下一页、上一页、选择全部、页面来源、..)。也一样LeafContextClickHandler,...

这就是为什么我想为 ContextMenu 本身添加一个绘制处理程序以防止它在特殊情况下绘制。

这是解释错误的图像:

在此处输入图像描述

4

2 回答 2

1

有几种方法可以做到这一点。您必须具有对正在绘制的组件的引用。然后,您可以添加 DrawHandler、VisibilityChangedHandler 或在本示例中添加 ShowContextMenuHandler。

不过,在您的示例中,我认为实现上述机制的更好方法是在 TreeGrid 上使用 LeafClickHandlers 和 FolderClickHandlers。

于 2012-03-05T14:37:05.903 回答
0

您对 ShowContextMenuHandler 的问题不是错误,而是 SmartGWT 的“功能”。在任何情况下,如果您不想显示浏览器的菜单,您所要做的就是停止将事件传播到浏览器。这可以通过以下代码片段轻松实现:

addShowContextMenuHandler(new ShowContextMenuHandler() {

        @Override
        public void onShowContextMenu(ShowContextMenuEvent event) {
            //Do not propagate to the browser's menu!
            event.cancel();
            //Continue with your code .... 
        }
    }
于 2012-03-05T23:44:25.193 回答