我正在尝试使用Widget.addHandler()
。但是,处理程序永远不会被调用。下面是我的示例代码。我需要更改什么来修复此问题?
我的处理程序实现:
public class CustomMouseMoveHandler
extends GwtEvent.Type<MouseMoveHandler>
implements MouseMoveHandler
{
@Override
public void onMouseMove(MouseMoveEvent event) {
System.out.println("----> onMouseMove.");
}
}
我的EntryPoint.OnModuleLoad()
:
ContentPanel cp = new ContentPanel();
cp.setHeaderVisible(false);
cp.setHeight(com.google.gwt.user.client.Window.getClientHeight());
CustomMouseMoveHandler handler = new CustomMouseMoveHandler();
cp.addHandler(handler, handler);
RootPanel.get().add(cp);
/////2011年7月1日添加。
以下完整的GWT简单代码也不起作用(应用了Jason的提示(。请帮帮我。感谢
package tut.client;
import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.event.dom.client.MouseMoveEvent;
import com.google.gwt.event.dom.client.MouseMoveHandler;
import com.google.gwt.user.client.ui.RootPanel;
import com.google.gwt.user.client.ui.TextArea;
/**
* Entry point classes define <code>onModuleLoad()</code>.
*/
public class GwtHandler implements EntryPoint, MouseMoveHandler {
/**
* This is the entry point method.
*/
public void onModuleLoad() {
TextArea comp = new TextArea();
comp.setSize("200px", "200px");
comp.setText("Testing Text");
comp.addHandler(this, MouseMoveEvent.getType());
RootPanel.get().add(comp);
}
@Override
public void onMouseMove(MouseMoveEvent event) {
com.google.gwt.user.client.Window.alert("onMouseMove");
}
}
GwtEvent.Type
用于基于特定于事件且唯一的对象调度事件(对象相等-==
-用于匹配事件类型(。将您的CustomMouseMoveHandler
作为Type
传递给addHandler
指示除用于MouseMoveEvent
的事件类型之外的事件类型(事实上,在这种情况下,每个CustomMouseMoveHandler
都将被分配给不同的事件Type
,因为每个对象都不同(。
您不需要在处理程序中扩展GwtEvent.Type<MouseMoveHandler>
,而是需要从MouseMoveEvent
本身获取事件Type
(使用静态getType()
方法(。
不要在CustomMouseMoveHandler
:中扩展GwtEvent.Type
public class CustomMouseMoveHandler
implements MouseMoveHandler
{
...
}
并添加处理程序:
cp.addDomHandler(handler, MouseMoveEvent.getType());
必须使用addDomHandler注册DomEvents,或者必须为其事件类型设置sinkEvents。addDomHandler是sinkEvents+addHandler的快捷方式。
以下是我解决问题的方法。我想向NumberLabel添加处理程序。这是行之有效的:
final NumberLabel<Long> label = new NumberLabel<Long>();
label.setValue(2000l);
label.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_RIGHT);
MouseOverHandler handler = new MouseOverHandler() {
public void onMouseOver(MouseOverEvent event) {
System.out.println("mouse over");
}
};
Widget widget = label.asWidget();
widget.addDomHandler(handler, MouseOverEvent.getType());
把它当作一个小部件来处理。
顺便说一下,System.out.println
起了作用。