0

我有这个代码:

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(){})

4

1 回答 1

3

真正的答案是你可能不知道。虽然这可用于将侦听器附加到事件,但您只能为每个元素附加一个侦听器 - 侦听然后获取所有已配置的 dom 事件(请参阅DOM.sinkEvents) - 并且您负责确保在页面卸载之前分离所有侦听器,否则某些浏览器会泄漏内存。

相反,强烈考虑使用 Widget(和子类)来管理事件。RootPanel 是其他人应该添加到的基本小部件,它将管理从页面中分离所有其他小部件以防止内存泄漏。

此外,您可以根据您所关注的事件类型来监听其中发生的事件。例如,即使在像 Label 这样通常不会触发 mouseover 事件的小部件上,您仍然可以附加处理程序并获取通知:

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 和内存泄漏的更多信息:

于 2012-10-03T21:28:58.493 回答