Events GWT中DOM元素上的处理程序

Events GWT中DOM元素上的处理程序,events,gwt,dom,widget,event-listener,Events,Gwt,Dom,Widget,Event Listener,我想在buttonelement上添加处理程序,我实现了如下。请帮助我解决此代码中的错误。我不想直接在按钮小部件上添加处理程序 Button button = new Button("Click"); Element buttonElement = button.getElement(); Event.setEventListener(buttonElement, new EventListener() { @Overr

我想在buttonelement上添加处理程序,我实现了如下。请帮助我解决此代码中的错误。我不想直接在按钮小部件上添加处理程序

        Button button = new Button("Click");
        Element buttonElement = button.getElement();

        Event.setEventListener(buttonElement, new EventListener() {

            @Override
            public void onBrowserEvent(Event event) {

                String string = event.getType();

                if(string.equalsIgnoreCase("click")) {
                    System.out.println("CLICK");
                }
            }
        });

        Event.sinkEvents(buttonElement, Event.ONCLICK);

您的代码是正确的,您可以在接收器事件之后添加小部件。您必须在接收器事件之前添加小部件。举个例子:

Button  button=new Button("Click");
    Element buttonElement = button.getElement();
      RootPanel.get().add(button);
    Event.sinkEvents(buttonElement, Event.ONCLICK);
    Event.setEventListener(buttonElement, new EventListener() {

        @Override
        public void onBrowserEvent(Event event) {
            System.out.println("ok");
             if(Event.ONCLICK == event.getTypeInt()) {
                 Window.alert("ok");
                  System.out.println("CLICK");
             }

        }
    });

但是为什么我们以后需要调用sinkEvents函数呢?因为
按钮
(以及大多数小部件)只有在有处理程序的情况下才会接收事件;这是由
addDomHandler
自动完成的。由于一些未知的原因,您不想添加ClickHandler,因此您必须自己调用
sinkEvents
。顺便说一句,如果不使用它的事件,为什么要创建一个
按钮
小部件?那么
Document.get().createButtonneElement()
?@ThomasBroyer实际上我想让datagrid的行可以拖动,为此我将行作为元素,并想在其上添加处理程序。[@Mani,因为每个小部件都需要一个“根”元素。每当小部件连接时,它都会从元素到小部件创建一个“反向引用”,即
elem.\uu listener=widget
,在DOM.setEventListener()中执行)无论何时连接小部件,都会设置此选项,无论何时连接,都会清除此选项detached@Bhumika:仅当您未明确使用
Event.setEventListener
(它在元素级别工作,而不是小部件级别,因此没有附加/分离的概念)
sinkEvents
也仅在小部件的第一个
onAttach
中调用。