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
}
}
}