我正在尝试使用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");
}
}发布于 2011-07-01 01:06:41
GwtEvent.Type用于基于特定于事件且唯一的对象(对象相等- == -用于匹配事件类型)来调度事件。将CustomMouseMoveHandler作为Type传递给addHandler表明事件类型不同于用于MouseMoveEvent的事件类型(实际上,在这种情况下,每个CustomMouseMoveHandler都会被分配给不同的事件Type,因为每个对象都不同)。
您需要从MouseMoveEvent本身获取事件Type (使用静态getType()方法),而不是在处理程序中扩展GwtEvent.Type<MouseMoveHandler>。
不要在CustomMouseMoveHandler中扩展GwtEvent.Type
public class CustomMouseMoveHandler
implements MouseMoveHandler
{
...
}并添加处理程序:
cp.addDomHandler(handler, MouseMoveEvent.getType());发布于 2011-07-01 22:05:54
必须使用addDomHandler注册DomEvents,否则您必须为其事件类型使用sinkEvents。addDomHandler是sinkEvents+addHandler的快捷方式。
发布于 2012-06-24 01:02:59
这是我如何解决我的问题的。我想向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起作用了。
https://stackoverflow.com/questions/6537458
复制相似问题