在 GWT 中如何右键单击?

8

我正在使用GWT构建一个AJAX Web应用程序,并且希望像桌面应用程序一样使用右键单击进行各种操作。但是,右键单击会产生标准的Web上下文菜单,并且void onClick(ClickEvent event)从未被调用。有没有人想出了如何使其工作的方法?谢谢!


如果不想阻止默认浏览器右键菜单,可以使用MouseDownHandler而不是ClickHandler来捕获右键单击。 - pistolPanties
3个回答

7

容易得很,只需在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();
  }

}

最后,您需要禁用浏览器菜单以完全覆盖此类型的上下文菜单。这在除Opera之外的所有浏览器中都可以工作。但是说实话,现在谁还使用Opera呢? ^_______^
<body oncontextmenu="return false;">

你因为 <body oncontextmenu="return false;"> 获得了一个赞!那部分让我抓狂了! - Jamie
那就是魔力所在!在那些花哨的 JS 框架出现之前,你无法想象我费了多少年才弄明白这个! - 1-14x0r

4

这是低效的,会导致在屏幕上渲染大量对象的复杂应用程序出现故障,因为您没有使用GWT内部的核心事件引擎。 - 1-14x0r

1

虽然有一些方法可以实现,但我认为GWT团队已经就此进行了辩论,并决定在Web应用程序中启用右键点击是一件不好的事情,因此做出了有意识的决定不予支持。争论的焦点是右键单击应该继续按预期方式工作(弹出主机浏览器的右键上下文菜单),而覆盖它会破坏这种预期行为,这将是一种不好的实践。虽然我曾遇到过右键上下文菜单可能很有用的情况,但通常我倾向于赞同GWT团队的决定。


5
我非常不同意。我猜大多数使用GWT的开发者都尝试通过它来更好地模拟桌面体验,包括上下文(右键)点击。在许多企业应用程序中,使用右键点击是有意义的。 - JP Richardson
我知道你的意思,一开始没有右键点击功能让我相当沮丧,但是在阅读了GWT团队的论点之后,我逐渐改变了看法。 - Daniel Vaughan
@Daniel Vaughan:有趣的观点。如果您添加了提到的 GWT 讨论的链接,我会投票支持它。 - ire_and_curses
请注意,他们在2008/2009年左右实现了一个ContextMenuHandler。只是因为它是一项高级功能,需要您阅读API,所以他们没有将其放在展示页面上。 - 1-14x0r

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接