Events GWT中DOM元素上的处理程序
我想在buttonelement上添加处理程序,我实现了如下。请帮助我解决此代码中的错误。我不想直接在按钮小部件上添加处理程序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
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
中调用。