簡體   English   中英

gwt:如何使用setEventListener?

[英]gwt: How to use setEventListener?

我有以下代碼:

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

真正的答案是您可能不會。 盡管可以將偵聽器附加到事件,但是您只能為每個元素附加一個偵聽器-偵聽然后獲取已配置的所有dom事件(請參閱DOM.sinkEvents ),並且您有責任確保在分離所有偵聽器之前該頁面將被卸載,否則某些瀏覽器將泄漏內存。

相反,強烈考慮使用小部件(和子類)來管理事件。 RootPanel是其他應添加到的基本窗口小部件,它將管理從頁面分離所有其他窗口小部件以防止內存泄漏。

此外,您還可以根據所關注事件的種類來聆聽其中發生的事件。 例如,即使在諸如Label之類的小部件上通常不會觸發鼠標懸停事件,您仍然可以附加處理程序並獲取通知:

Label label = new Label();
label.addDomHandler(new MouseOverHandler() {
  @Override
  public void onMouseOver(MouseOverEvent event) {
    // do something
  }
}, MouseOverEvent.getType());
RootPanel.get().add(label);

在大多數情況下,您將使用現有的支持方法,例如Button來獲取click事件-由於HasClickHandlers接口,已經為您提供了便捷的方法:

Button button = new Button();
button.addClickHandler(new ClickHandler() {
  @Override
  public void onClick(ClickEvent event) {
    // do something
  }
});
panel.add(button);

有關GWT,小部件和內存泄漏的更多信息:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM