我有这段代码:
DOM.setEventListener(row.getElement(), new ClickListener(){
@Override
public void onClick(Widget sender) {
// TODO Auto-generated method stub
}});
我认为代码很好而且ClickListener
扩展了EventListener
,但却出错:The method setEventListener(Element, EventListener) in the type DOM is not applicable for the arguments (Element, new ClickListener(){})
答案 0 :(得分:3)
真正的答案是你可能没有。虽然这可以将侦听器附加到事件,但是每个元素只能附加一个侦听器 - 然后侦听所有已配置的dom事件(请参阅DOM.sinkEvents
) - 并且您有责任确保将所有事件分离页面卸载前的监听器,否则一些浏览器会泄漏内存。
相反,强烈考虑使用Widget(和子类)来管理事件。 RootPanel是应该添加其他人的基本窗口小部件,它将管理从页面中分离所有其他窗口小部件以防止内存泄漏。
此外,您可以根据您所追踪的事件类型收听在那里发生的事件。例如,即使在像“标签”这样通常不会触发鼠标悬停事件的小部件上,您仍然可以附加处理程序并获取通知:
Label label = new Label();
label.addDomHandler(new MouseOverHandler() {
@Override
public void onMouseOver(MouseOverEvent event) {
// do something
}
}, MouseOverEvent.getType());
RootPanel.get().add(label);
在大多数情况下,您将使用现有的支持方法,例如Button来获取点击事件 - 由于HasClickHandlers
等接口,您已经有了方便的方法:
Button button = new Button();
button.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
// do something
}
});
panel.add(button);
有关GWT,Widget和内存泄漏的更多信息: