GWT中DOM元素的处理程序

Man*_*ani 12 events gwt dom widget event-listener

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

bNd*_*bNd 20

您的代码是正确的,您可能会在接收器事件后添加小部件.你必须在接收器事件之前添加小部件.只是示例:

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");
             }

        }
    });
Run Code Online (Sandbox Code Playgroud)

  • 因为`Button`(和大多数小部件)只有_sink_一个事件,如果它有一个处理程序; 这是由`addDomHandler`自动完成的.这里有一些不明原因,你不想`addClickHandler`,所以你必须自己调用`sinkEvents`.顺便说一句,如果你不使用它的事件,为什么要创建一个`Button`小部件呢?如何`Document.get().createButtonElement()`? (2认同)