例如,我有一个TreeGrid
,我在ContextMenu
添加了TreeGrid
。现在我只想在用户右键单击叶节点时绘制ContextMenu
。我的想法是检测即将绘制ContextMenu
的时间,并检查右键单击的节点是否为Leaf节点:
ContextMenu
但是什么事件处理组件的绘制?
更新
showContextMenuHandler
不起作用。实际上这是一个SmartGWT
错误,因为如果我说contextMenu.show(),我实际上得到了两个上下文菜单:一个来自SmartGWT
(我做的那个)和第二个浏览器,其中包含(下一页,上一页,选择全部,页面源,..)等元素。同样适用于LeafContextClickHandler
,...
这就是为什么我想为ContextMenu本身添加一个绘制处理程序,以防止它在特殊情况下绘制。
这是一张解释错误的图片:
答案 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 ....
}
}