我正在使用GWT构建一个AJAX Web应用程序,并且希望像桌面应用程序一样使用右键单击进行各种操作。但是,右键单击会产生标准的Web上下文菜单,并且void onClick(ClickEvent event)从未被调用。有没有人想出了如何使其工作的方法?谢谢!
我正在使用GWT构建一个AJAX Web应用程序,并且希望像桌面应用程序一样使用右键单击进行各种操作。但是,右键单击会产生标准的Web上下文菜单,并且void onClick(ClickEvent event)从未被调用。有没有人想出了如何使其工作的方法?谢谢!
容易得很,只需在contextmenuhandler上添加一个监听器,根据用户右键单击的位置显示一个小部件。 https://confluence.clazzes.org/pages/viewpage.action?pageId=425996
class MyWidget extends Composite implements ContextMenuHandler {
// just an example, use a meaningful Widget here...
private Widget base;
private PopupPanel contextMenu;
public MyWidget() {
// initialize base widget, etc...
this.contextMenu = new PopupPanel(true);
this.contextMenu.add(new HTML("My Context menu!"));
this.contextMenu.hide();
initWidget(this.base);
// of course it would be better if base would implement HasContextMenuHandlers, but the effect is the same
addDomHandler(this, ContextMenuEvent.getType());
}
public void onContextMenu(ContextMenuEvent event) {
// stop the browser from opening the context menu
event.preventDefault();
event.stopPropagation();
this.contextMenu.setPopupPosition(event.getNativeEvent().getClientX(), event.getNativeEvent().getClientY());
this.contextMenu.show();
}
}
<body oncontextmenu="return false;">
原来您可以通过扩展DeckPanel
来实现。以下是一次出色的讨论,以及一个漂亮的演示,证明它可以工作。
http://whatwouldnickdo.com/wordpress/370/gwt-right-click-context-menu/
虽然有一些方法可以实现,但我认为GWT团队已经就此进行了辩论,并决定在Web应用程序中启用右键点击是一件不好的事情,因此做出了有意识的决定不予支持。争论的焦点是右键单击应该继续按预期方式工作(弹出主机浏览器的右键上下文菜单),而覆盖它会破坏这种预期行为,这将是一种不好的实践。虽然我曾遇到过右键上下文菜单可能很有用的情况,但通常我倾向于赞同GWT团队的决定。