GWT Widget.addHandler

Pet*_*ter 2 gwt event-handling addhandler

我正在努力利用Widget.addHandler().但是,处理程序永远不会被调用.以下是我的示例代码.我需要更改什么来解决这个问题?

我的处理程序实现:

public class CustomMouseMoveHandler
  extends GwtEvent.Type<MouseMoveHandler>
  implements MouseMoveHandler
{
  @Override
  public void onMouseMove(MouseMoveEvent event) {
    System.out.println("----> onMouseMove.");
  }
}
Run Code Online (Sandbox Code Playgroud)

我的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);
Run Code Online (Sandbox Code Playgroud)

/////在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");
       }
}
Run Code Online (Sandbox Code Playgroud)

Jas*_*erk 9

GwtEvent.Type用于根据事件特定和唯一对象分派事件(对象相等 - ==用于匹配事件类型).将您的CustomMouseMoveHandleras作为Typeto addHandler表示除了用于MouseMoveEvents 的事件类型之外的事件类型(实际上,在这种情况下,每个CustomMouseMoveHandler事件将分配给不同的事件,Type因为每个对象都不同).

GwtEvent.Type<MouseMoveHandler>您需要TypeMouseMoveEvent自身获取事件(使用静态getType()方法),而不是在处理程序中进行扩展.

不要延伸GwtEvent.Type到你的CustomMouseMoveHandler:

public class CustomMouseMoveHandler
  implements MouseMoveHandler
{
  ...
}
Run Code Online (Sandbox Code Playgroud)

并添加处理程序:

cp.addDomHandler(handler, MouseMoveEvent.getType());
Run Code Online (Sandbox Code Playgroud)


Tho*_*yer 5

DomEvents 必须使用 addDomHandler 注册,或者你必须为它们的事件类型使用 sinkEvents。addDomHandler 是 sinkEvents+addHandler 的快捷方式。