在SmartGWT中,什么事件会告诉您是否正在绘制某些内容?

时间:2012-03-05 10:11:34

标签: canvas contextmenu smartgwt treegrid

例如,我有一个TreeGrid,我在ContextMenu添加了TreeGrid。现在我只想在用户右键单击叶节点时绘制ContextMenu。我的想法是检测即将绘制ContextMenu的时间,并检查右键单击的节点是否为Leaf节点:

  • 如果节点是叶子,请绘制ContextMenu
  • 如果节点一片叶子,则取消绘制

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

更新

showContextMenuHandler不起作用。实际上这是一个SmartGWT错误,因为如果我说contextMenu.show(),我实际上得到了两个上下文菜单:一个来自SmartGWT(我做的那个)和第二个浏览器,其中包含(下一页,上一页,选择全部,页面源,..)等元素。同样适用于LeafContextClickHandler,...

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

这是一张解释错误的图片:

enter image description here

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分: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 .... 
        }
    }