Java 如何将HasEventHandler注册到自行创建的GWT小部件?

Java 如何将HasEventHandler注册到自行创建的GWT小部件?,java,gwt,mgwt,Java,Gwt,Mgwt,我正在创建自己的按钮小部件,并希望在此小部件上注册HasClickHandlers和HasMouseoverHandlers。 问题是当我使用这个小部件并添加ClickHandler时,没有任何反应 MyButton extends Widget implements HasClickHandlers, HasMouseOverHandlers{ Element elem; Element child1; Element child2; public MyBu

我正在创建自己的按钮小部件,并希望在此小部件上注册HasClickHandlers和HasMouseoverHandlers。 问题是当我使用这个小部件并添加ClickHandler时,没有任何反应

MyButton extends Widget implements HasClickHandlers, HasMouseOverHandlers{

    Element elem;
    Element child1;
    Element child2;

    public MyButton(String txt1, String txt2){

          elem = Document.get().createDivElement();
          child1 = Document.get().createDivElement();
          child2 = Document.get().createDivElement();

          child1.setInnerText(txt1);
          child2.setInnerText(txt2);


         elem.appendChild(child1);
         elem.appendChild(child2);

         setStyleName(elem, "elem");
         setStyleName(child1, "child1");
         setStyleName(child1, "child2");

         setElement(elem);
    }

    @Override
    public HandlerRegistration addClickHandler(ClickHandler handler) {
         return this.addHandler(handler, ClickEvent.getType());
    }

    @Override
    public HandlerRegistration addMouseOverHandler(MouseOverHandler handler) {
            return this.addDomHandler(handler, MouseOverEvent.getType());
    }



}
现在我使用这个小部件,应该是一个按钮

MyButton b1 = new MyButton("Hello", "People");
b1.addClickHandler(new ClickHandler() {
        public void onClick(ClickEvent event) {
            Window.alert("Hi");
        }
    });
点击后没有反应

b1.addMouseOverHandler(new MouseOverHandler() {
        public void onMouseOver(MouseOverEvent event) {

            anotherWidget.getElement().getStyle().setBackgroundColor("yellow");
        }
    });
mouseOverHandler有效,但clickHandler无效。
怎么了

像这样替换
addClickHandler
函数

 public HandlerRegistration addClickHandler(ClickHandler handler) {
         return this.addDomHandler(handler, ClickEvent.getType());
    }
当您只添加处理程序时,它将不会与DOM事件同步,或者要使用
addHandler
,您需要明确指定同步,如下所示:

int typeInt = Event.getTypeInt(ClickEvent.getType().getName());       
sinkEvents(typeInt);

像这样替换
addClickHandler
函数

 public HandlerRegistration addClickHandler(ClickHandler handler) {
         return this.addDomHandler(handler, ClickEvent.getType());
    }
当您只添加处理程序时,它将不会与DOM事件同步,或者要使用
addHandler
,您需要明确指定同步,如下所示:

int typeInt = Event.getTypeInt(ClickEvent.getType().getName());       
sinkEvents(typeInt);

像这样替换
addClickHandler
函数

 public HandlerRegistration addClickHandler(ClickHandler handler) {
         return this.addDomHandler(handler, ClickEvent.getType());
    }
当您只添加处理程序时,它将不会与DOM事件同步,或者要使用
addHandler
,您需要明确指定同步,如下所示:

int typeInt = Event.getTypeInt(ClickEvent.getType().getName());       
sinkEvents(typeInt);

像这样替换
addClickHandler
函数

 public HandlerRegistration addClickHandler(ClickHandler handler) {
         return this.addDomHandler(handler, ClickEvent.getType());
    }
当您只添加处理程序时,它将不会与DOM事件同步,或者要使用
addHandler
,您需要明确指定同步,如下所示:

int typeInt = Event.getTypeInt(ClickEvent.getType().getName());       
sinkEvents(typeInt);