我正在使用 GWT。我开始通过添加事件处理程序向我的小部件添加事件。
事件处理程序示例代码:
widget.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
// do something
}
});
然后我发现还有另一种方法可以使用sinkEvents()来处理事件。
接收器事件示例代码(从这个网站 http://www.java2s.com/Code/Java/GWT/TableMouseOverEvent.htm):
{
...
sinkEvents(Event.ONMOUSEDOWN | Event.ONMOUSEUP | Event.ONMOUSEOVER |Event.ONMOUSEOUT)
...
}
public void onBrowserEvent(Event event) {
Element td = getEventTargetCell(event);
if (td == null) return;
Element tr = DOM.getParent(td);
switch (DOM.eventGetType(event)) {
case Event.ONMOUSEDOWN: {
// do something
break;
}
case Event.ONMOUSEUP: {
// do something
break;
}
case Event.ONMOUSEOVER: {
// do something
break;
}
case Event.ONMOUSEOUT: {
// do something
break;
}
}
}
-
EventHandler 和 SinkEvent 是否执行相同的功能工作?
- 如果是,有哪些权衡? (你会在哪里使用其中一个而不是另一个)
- 如果不是,它们有何不同?
我不是 GWT 专家,但这是我通过查看 GWT 源代码得到的信息:
-
所有事件处理程序(最终)调用哪个调用sinkEvents()
. sinkEvents()
是较低级别的,是围绕本机 JavaScript 事件处理的浏览器抽象包装器。
EventHandlers 构建在sinkEvents 之上,因此它们提供sinkEvents 所具有的所有功能。
但在使用方面它们是不同的:使用 EventHandler,您可以使用驻留在不同类中的不同事件处理程序来注册不同的事件类型。事件将自动路由到适当的处理程序。使用sinkEvents,您可以注册不同的事件类型(通过int,不是类型安全的),但始终是这个小部件的onBrowserEvent(event)
将被调用。
事件处理程序增加了一定的开销。这是否重要还有待商榷。
事件处理程序是添加和删除事件处理程序的类型安全方法,也是将事件路由到您选择的已注册处理程序的自动方法。如果您使用 GWT Widget,那么您应该使用 EventHandler。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)