【问题标题】:GWT: context menu in RichTextAreaGWT:RichTextArea 中的上下文菜单
【发布时间】:2012-11-08 21:45:11
【问题描述】:

我在 GWT 应用程序中使用 RichTextArea。我想向我的 RichTextArea 添加上下文菜单:

public class MyRichTextArea extends RichTextArea implements HasContextMenuHandlers {
    public HandlerRegistration addContextMenuHandler(ContextMenuHandler h) {
        return addDomHandler(h, ContextMenuEvent.getType());
    }
}

(...)

myRichTextArea.addContextMenuHandler(new ContextMenuHandler() {
    public void onContextMenu(ContextMenuEvent event) {
        contextMenu.show();
    }
});

这可行,但是,上下文菜单仅在我右键单击 RichTextArea 的边框时出现。如果我右键单击 RichTextArea,例如在包含的文本上,会显示浏览器的默认上下文菜单。

如何显示我自己的上下文菜单?

【问题讨论】:

  • 您可能希望拦截对 RichtTextArea 的子元素的鼠标右键单击以显示上下文菜单。您也可以尝试将鼠标处理程序添加到 RichTextArea。

标签: gwt richtextbox contextmenu


【解决方案1】:

防止默认上下文记忆:

myRichTextArea.addDomHandler(new ContextMenuHandler() {

@Override public void onContextMenu(ContextMenuEvent event) {
    event.preventDefault();
    event.stopPropagation();
            // do what you want to do instead
}

}, ContextMenuEvent.getType());

【讨论】:

  • 嗯,这可行,但它不会阻止显示本机上下文菜单。所以这不是我的问题的解决方案。
  • 是的,我发现我也有浏览器上下文菜单
【解决方案2】:

我会采用一种方法来告诉您富文本区域具有焦点,例如 hasfocus,或者更好的事件侦听器 (addFocusListener) 来告诉您鼠标右键单击鼠标时焦点何时存在按钮?

这有意义吗?

【讨论】:

  • 好吧,FocusEvent 不包含任何关于小部件如何获得焦点的信息。也就是说,我无法区分它是否因为鼠标右键或左键单击而获得焦点。
  • 您没有说您无法检测到右键单击。你说你的代码只在边界上工作。这是一个参考,但我认为如果您测试 event.button==2 或 event.button==3,您将涵盖所有基础。 unixpapa.com/js/mouse.html 无论如何,如果您检查按钮 2 或 3 并且它仍然不起作用,那么我会检查焦点 - 在单击这两个按钮之一之后。这有意义吗?
  • 基本上,我是说检查左键单击,然后确保你的 textarea 有焦点 - 然后你就会知道你想要显示一个上下文菜单,如果你有多个,你应该知道哪一个(例如,如果多个 html 元素具有上下文菜单)。无论如何,希望这是有道理的,并且对您有所帮助。
猜你喜欢
  • 1970-01-01
  • 2019-08-02
  • 2013-03-12
  • 2015-10-09
  • 2017-10-08
  • 2012-01-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多