首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GWT Widget.addHandler

GWT Widget.addHandler
EN

Stack Overflow用户
提问于 2011-06-30 23:45:31
回答 3查看 24.6K关注 0票数 2

我正在尝试使用Widget.addHandler()。但是,处理程序永远不会被调用。下面是我的示例代码。我需要更改什么才能解决这个问题?

我的处理程序实现:

代码语言:javascript
复制
public class CustomMouseMoveHandler
  extends GwtEvent.Type<MouseMoveHandler>
  implements MouseMoveHandler
{
  @Override
  public void onMouseMove(MouseMoveEvent event) {
    System.out.println("----> onMouseMove.");
  }
}

我的EntryPoint.OnModuleLoad()

代码语言:javascript
复制
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的提示)。请帮帮我。谢谢

代码语言:javascript
复制
 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");
       }
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-07-01 01:06:41

GwtEvent.Type用于基于特定于事件且唯一的对象(对象相等- == -用于匹配事件类型)来调度事件。将CustomMouseMoveHandler作为Type传递给addHandler表明事件类型不同于用于MouseMoveEvent的事件类型(实际上,在这种情况下,每个CustomMouseMoveHandler都会被分配给不同的事件Type,因为每个对象都不同)。

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

不要在CustomMouseMoveHandler中扩展GwtEvent.Type

代码语言:javascript
复制
public class CustomMouseMoveHandler
  implements MouseMoveHandler
{
  ...
}

并添加处理程序:

代码语言:javascript
复制
cp.addDomHandler(handler, MouseMoveEvent.getType());
票数 9
EN

Stack Overflow用户

发布于 2011-07-01 22:05:54

必须使用addDomHandler注册DomEvents,否则您必须为其事件类型使用sinkEvents。addDomHandler是sinkEvents+addHandler的快捷方式。

票数 5
EN

Stack Overflow用户

发布于 2012-06-24 01:02:59

这是我如何解决我的问题的。我想向NumberLabel添加处理程序。这就是有效的方法:

代码语言:javascript
复制
    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起作用了。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6537458

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档