Events GWT事件预览与事件处理程序

Events GWT事件预览与事件处理程序,events,gwt,handler,preview,Events,Gwt,Handler,Preview,我的问题是,GWT中的事件预览和事件处理程序有什么不同 有一个用于事件预览的回调函数boolean-onEventPreview(Event-Event),还有一个回调函数void-onBrowserEvent(Event-Event)。它们非常相似,那么它们之间有什么不同呢?特别是当事件处理程序工作正常时,我什么时候应该使用事件预览 感谢来自javadoc的: 只要此预览保持在堆栈顶部,它就会在将所有事件激发到侦听器之前接收这些事件。请注意,事件预览将接收所有事件,包括由于冒泡而接收的事件,而

我的问题是,GWT中的事件预览和事件处理程序有什么不同

有一个用于事件预览的回调函数
boolean-onEventPreview(Event-Event)
,还有一个回调函数
void-onBrowserEvent(Event-Event)
。它们非常相似,那么它们之间有什么不同呢?特别是当事件处理程序工作正常时,我什么时候应该使用事件预览

感谢来自javadoc的

只要此预览保持在堆栈顶部,它就会在将所有事件激发到侦听器之前接收这些事件。请注意,事件预览将接收所有事件,包括由于冒泡而接收的事件,而普通事件处理程序只接收显式沉没的事件

您可以从
onEventPreview
返回false以取消事件,在这种情况下,将不会触发事件处理程序

DOM.addEventPreview(EventPreview preview)
允许您将事件预览放置在事件堆栈的顶部,在触发任何
onBrowserEvent(event event)
之前调用该事件堆栈。这样,您可以在事件触发发生之前放置一些逻辑。您甚至可以通过返回false来防止事件触发。例如,下面的示例阻止浏览器对mousemove和mousedown事件做出反应。(单击并拖动图像,浏览器不会拖动图像的轮廓)

只是提醒一下,以这种方式添加eventPreviews会降低成本。正确的方法是使用
Event.addNativePreviewHandler(NativePreviewHandler处理程序)

    DOM.addEventPreview(new EventPreview() {
        @Override
        public boolean onEventPreview(Event event) {
            switch (DOM.eventGetType(event)){
                case Event.ONMOUSEDOWN:
                case Event.ONMOUSEMOVE:
                    event.preventDefault();
            } 
            return true;
        }
    });