gwt:如何使用setEventListener?

时间:2012-10-03 17:21:08

标签: java gwt

我有这段代码:

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

1 个答案:

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