我正在尝试捕获窗口小部件的右键单击,弹出我自己的上下文菜单而不是浏览器。有一些关于此的参考,但最受欢迎的here有点过时,尽管一些评论包含更新的代码片段。
我拼凑了一些比特,我让它在Chrome和FF中工作,但不是IE。在IE中它不显示默认的浏览器上下文菜单,但它不显示我的菜单。我刚刚进入GWT,所以我假设我没有用正确的处理程序或事件做正确的事情。我也在使用gwt-graphics模块,这就是我扩展的Rectangle类来自哪里,以防相关。
这是我的代码:
public class RectangleRightClickable extends Rectangle {
public RectangleRightClickable(int x, int y, int width, int height) {
super(x, y, width, height);
sinkEvents(Event.ONCONTEXTMENU);
}
public void onBrowserEvent(Event event) {
GWT.log("onBrowserEvent");
event.stopPropagation();
event.preventDefault();
GWT.log("event type : " + DOM.eventGetType(event));
switch(DOM.eventGetType(event)) {
case Event.ONCONTEXTMENU:
if (DOM.eventGetButton(event) == Event.BUTTON_RIGHT) {
GWT.log("Event.BUTTON_RIGHT", null);
showMenu();
}
break;
default:
GWT.log(event.toString());
break;
}
}
protected void showMenu() {
final RectangleRightClickable parent = this;
final PopupMenu popMenu = new PopupMenu();
popMenu.addMenuItem(new Label("Add thing"));
popMenu.setPopupPositionAndShow(new PopupPanel.PositionCallback() {
public void setPosition(int offsetWidth, int offsetHeight) {
int left = parent.getX() + parent.getWidth();
int top = parent.getY() + parent.getWidth();
popMenu.setPopupPosition(left, top);
}
});
}
}
答案 0 :(得分:0)
在GWT google群组列表中获得此回复,该列表有效:
addDomHandler(new ContextMenuHandler()
{
@Override
public void onContextMenu(ContextMenuEvent event)
{
showMenu();
event.preventDefault();
}
}, ContextMenuEvent.getType());