Los eventos en Google Web Toolkit usan interfaces listener (de escucha de eventos), de una manera muy similar a como se utilizan en otros frameworks. Una interfaz listener, define uno o más métodos que los widgets usan para anunciar un evento. Una clase que recibe eventos de un tipo en particular, implementa la interfaz listener asociada con el tipo de eventos que recibe y luego pasa una referencia del widget que generó el evento para “suscribirlo” a un conjunto de eventos.
La clase Button, por ejemplo, publica eventos click. La interfaz asociada para este tipo de eventos es ClickListener:
public void ejemploDeClickListener() {
Button b = new Button("Dame clic");
b.addClickListener(new ClickListener() {
public void onClick(Widget sender) {
// aquí se determina que sucede cuando se hace clic
}
});
}
Usar clases anónimas dentro de otras clases, puede ser ineficiente para un gran número de widgets, puesto que podría resultar en la creación de muchos objetos listener. Los widgets proveen su apuntador this como el parámetro sender cuando invocan un método listener, permitiendo que sea sencillo para el listener distinguir entre los diferentes publicadores. Esto hace un mejor uso de la memoria, pero requiere más lineas de código para su implementación, como en el siguiente ejemplo:
public class EjemploListener extends Composite implements ClickListener {
private FlowPanel fp = new FlowPanel();
private Button b1 = new Button("Button 1");
private Button b2 = new Button("Button 2");
public EjemploListener() {
initWidget(fp);
fp.add(b1);
fp.add(b2);
b1.addClickListener(this);
b2.addClickListener(this);
}
public void onClick(Widget sender) {
if (sender == b1) {
// handle b1 being clicked
} else if (sender == b2) {
// handle b2 being clicked
}
}
}
Algunas interfaces de eventos especifican más de un evento. Si estás interesado en solo un subconjunto de eventos, puedes usar “adapters”. Los adaptadores (adapters) son implementaciones vacías de una interfaz de eventos en particular, desde que puedas derivar una clase listener sin tener que implementar todo el método:
public void ejemploAdapter() {
TextBox t = new TextBox();
t.addKeyboardListener(new KeyboardListenerAdapter() {
public void onKeyPress(Widget sender, char keyCode, int modifiers) {
// handle only this one event
}
});
}

0 comentarios:
Publicar un comentario en la entrada