GWT:在RichTextArea中添加上下文菜单

4

我在一个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中右键单击,例如在包含的文本上,将显示浏览器的默认上下文菜单。
如何显示自己的上下文菜单?

您可能想要拦截 RichTextArea 的子元素的鼠标右键单击事件以显示上下文菜单。您也可以尝试向 RichTextArea 添加鼠标处理程序。 - Miguel Ping
2个回答

1

防止默认上下文菜单:

myRichTextArea.addDomHandler(new ContextMenuHandler() {

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

}, ContextMenuEvent.getType());


},ContextMenuEvent.getType());


这个方法可以用,但是它无法阻止本地上下文菜单的出现。所以对于我的问题来说并不是一个解决方案。 - Bob
是的,我发现我也得到了浏览器上下文菜单 - yazzapps.com

0

我会寻找一种方法来告诉你富文本区域是否拥有焦点,比如 hasfocus,或者更好的方式是添加一个事件监听器(addFocusListener),以便在鼠标右键点击时告诉你焦点是否在那里?

这样说你明白了吗?


嗯,FocusEvent没有包含任何关于小部件如何获得焦点的信息。也就是说,我无法区分它是因为右键还是左键单击而获得焦点。 - Bob
你没有说你无法检测到右键点击。你说你的代码只在边界上工作。这是一个参考,但我认为如果你测试event.button==2或event.button==3,你就可以覆盖所有情况。http://unixpapa.com/js/mouse.html无论如何,如果你检查了按钮2或3,仍然不起作用,那么我会在其中一个被点击后检查焦点。这样说得通吗? - George Sisco
基本上,我是指检查左键单击,然后确保您的文本区域具有焦点-然后您将知道要显示上下文菜单,如果您有多个,则应知道哪一个(例如,如果超过一个HTML元素具有上下文菜单)。无论如何,希望这有意义,并且能帮助到您。 - George Sisco

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