UiHandlers

GWT 中的事件使用与其他用户界面框架类似的处理程序模型。处理程序接口定义了小部件调用以宣布事件的一个或多个方法。希望接收特定类型事件的类实现相关的处理程序接口,然后将对自身的引用传递给小部件以订阅一组事件。例如,Button 类发布单击事件。相关的处理程序接口是ClickHandler

以下示例演示了如何向 Button 实例添加自定义 ClickHandler 子类

public void anonClickHandlerExample() {
  Button b = new Button("Click Me");
  b.addClickHandler(new ClickHandler() {
    public void onClick(ClickEvent event) {
      // handle the click event
    }
  });
}

与上述示例中使用匿名内部类一样,对于大量小部件,使用匿名内部类可能会使用过多的内存,因为它会导致创建许多处理程序对象。与其为需要监听的每个小部件创建 ClickHandler 对象的单独实例,不如在许多小部件之间共享单个处理程序。小部件在调用处理程序方法时将其自身声明为事件的来源,允许单个处理程序使用事件对象的 getSource() 方法区分多个事件发布者。这可以更好地利用内存,但需要稍微更多的代码,如以下示例所示

public class HandlerExample extends Composite implements ClickHandler {
  private FlowPanel fp = new FlowPanel();
  private Button b1 = new Button("Button 1");
  private Button b2 = new Button("Button 2");

  public HandlerExample() {
    initWidget(fp);
    fp.add(b1);
    fp.add(b2);
    b1.addClickHandler(this);
    b2.addClickHandler(this);
  }

  public void onClick(ClickEvent event) {
    // note that in general, events can have sources that are not Widgets.
    Widget sender = (Widget) event.getSource();

    if (sender == b1) {
      // handle b1 being clicked
    } else if (sender == b2) {
      // handle b2 being clicked
    }
  }
}