java - GWT 事件防止默认在 Java 中不起作用

标签 java events gwt

我是 GWT 新手,我需要右键单击才能正常工作。我读过的 doco 建议我需要重写 onBrowserEvent() 方法。我只是在这个阶段进行尝试。事件已处理并出现我的弹出窗口。但是,一旦我关闭弹出窗口,通常的浏览器下拉菜单就会出现(带有“将此页面添加为书签”等选项)。

我正在使用 IceWeasel 24.5.0(Debian 的 FireFox 克隆),显然,Debian(喘息)。

相关代码如下:

public ActivityTextCell() {
    super(BrowserEvents.MOUSEDOWN, BrowserEvents.MOUSEUP);
}

@Override
public void onBrowserEvent(
        com.google.gwt.cell.client.Cell.Context context,
        Element parent, 
        ActivityDTO value, 
        NativeEvent event,
        ValueUpdater<ActivityDTO> valueUpdater) {

    super.onBrowserEvent(context, parent, value, event, valueUpdater);
    event.preventDefault();
    event.stopPropagation();
    if (event.getType().equals(BrowserEvents.MOUSEUP)) {
        Window.alert("mouse up event");

    }
    else {

        switch ( event.getButton()){
        case NativeEvent.BUTTON_RIGHT:
            Window.alert("right mouseclick");
            break;
        case NativeEvent.BUTTON_LEFT:
            Window.alert("left mouseclick");
            break;
        case NativeEvent.BUTTON_MIDDLE:
        default:
            break; // Do nothing
        }
    }

ActivityTextCell 类扩展了 AbstractCell。

那我错过了什么?如何阻止浏览器对鼠标单击使用react?

最佳答案

嗯,这当然不是几分钟的问题(从我花了一周时间才回到这个事实可以看出),但我有一个解决方案。我尝试颠倒 event.preventDefault()super.onBrowserEvent() 的顺序,但它并没有真正帮助。

我在普通网页上尝试了一些实验。事实证明,MOUSEDOWN 事件在该上下文中不会执行任何操作,并且通常的浏览器选择菜单出现在 MOUSEUP 上。所以 if/else 逻辑有点半途而废了。

诀窍是在添加主页后立即在顶级 GUI 类中包含以下内容:

RootLayoutPanel.get().addDomHandler(new ContextMenuHandler() {

    @Override
    public void onContextMenu(ContextMenuEvent event) {
        event.preventDefault();
        event.stopPropagation();
    }
}, ContextMenuEvent.getType());

这具有额外的好处(至少对于我的目的而言),可以防止浏览器对应用程序 View 中任意位置的右键单击使用react。

顺便说一句:防止默认操作的目的是阻止浏览器做自己的事情。停止传播可能不是必需的,但我无论如何都保留了它(传播从节点到根,而不是相反)。重写 onBrowserEvent() 的目的是使您自己的应用程序能够处理该事件。使用 super.onBrowserEvent() 是为了首先允许由您的代码处理该事件。我在之前的评论中已经给出了相关引用。如果您可能需要进行大量 GWT 编码,那么《GWT in Action》一书非常值得一读。

关于java - GWT 事件防止默认在 Java 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25192550/

相关文章:

java - XMLUnit 忽略元素顺序

java - 如何在CompilationUnit中获取有关导入的问题

WPF 列表框 + 扩展器事件

wpf - 在 WPF DataGrid 中实现编辑和双击 (MouseDoubleClick)。

java - 在GUI线程中触发异步事件

mysql - 将图像存储在数据库中

java - GWT 可调整大小的对话框选项

java - Android Assets 转原始

java - UtF-8 格式在 tomcat 服务器的 servlet 中不起作用

java - Google App Engine 上的 Ajax 抓取 - HtmlUnit 是否有效?