GWT Widget.addHandler
event-handling (3)
Los DomEvents deben registrarse usando addDomHandler, o tienes que sinkEvents para su tipo de evento. addDomHandler es un atajo para sinkEvents + addHandler.
Estoy tratando de utilizar Widget.addHandler()
. Sin embargo, nunca se llama al controlador. A continuación está mi código de muestra. ¿Qué necesito cambiar para arreglar esto?
Implementación de mi controlador:
public class CustomMouseMoveHandler
extends GwtEvent.Type<MouseMoveHandler>
implements MouseMoveHandler
{
@Override
public void onMouseMove(MouseMoveEvent event) {
System.out.println("----> onMouseMove.");
}
}
Mi EntryPoint.OnModuleLoad()
:
ContentPanel cp = new ContentPanel();
cp.setHeaderVisible(false);
cp.setHeight(com.google.gwt.user.client.Window.getClientHeight());
CustomMouseMoveHandler handler = new CustomMouseMoveHandler();
cp.addHandler(handler, handler);
RootPanel.get().add(cp);
///// Agregado el 01/07/2011.
El siguiente código simple completo de GWT tampoco funciona (con la sugerencia de Jason aplicada). Por favor, ayúdame. Gracias
package tut.client;
import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.event.dom.client.MouseMoveEvent;
import com.google.gwt.event.dom.client.MouseMoveHandler;
import com.google.gwt.user.client.ui.RootPanel;
import com.google.gwt.user.client.ui.TextArea;
/**
* Entry point classes define <code>onModuleLoad()</code>.
*/
public class GwtHandler implements EntryPoint, MouseMoveHandler {
/**
* This is the entry point method.
*/
public void onModuleLoad() {
TextArea comp = new TextArea();
comp.setSize("200px", "200px");
comp.setText("Testing Text");
comp.addHandler(this, MouseMoveEvent.getType());
RootPanel.get().add(comp);
}
@Override
public void onMouseMove(MouseMoveEvent event) {
com.google.gwt.user.client.Window.alert("onMouseMove");
}
}
GwtEvent.Type
se usa para despachar eventos en función de un evento específico y un objeto único (la igualdad de objetos - ==
- se usa para hacer coincidir los tipos de eventos). Pasar CustomMouseMoveHandler
como Type
to addHandler
indica un tipo de evento distinto al utilizado para MouseMoveEvent
s (De hecho, en este caso cada CustomMouseMoveHandler
se asignaría a un Type
evento diferente ya que cada objeto es diferente).
En lugar de extender GwtEvent.Type<MouseMoveHandler>
en su controlador, necesita obtener el Type
evento de MouseMoveEvent
(utilizando el getType()
estático getType()
).
No extienda GwtEvent.Type
en su CustomMouseMoveHandler
:
public class CustomMouseMoveHandler
implements MouseMoveHandler
{
...
}
Y para agregar el controlador:
cp.addDomHandler(handler, MouseMoveEvent.getType());
Así es como resolví mi problema. Quería agregar manejadores a NumberLabel . Esto es lo que funcionó:
final NumberLabel<Long> label = new NumberLabel<Long>();
label.setValue(2000l);
label.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_RIGHT);
MouseOverHandler handler = new MouseOverHandler() {
public void onMouseOver(MouseOverEvent event) {
System.out.println("mouse over");
}
};
Widget widget = label.asWidget();
widget.addDomHandler(handler, MouseOverEvent.getType());
El tratamiento es como un Widget hizo el truco.
Por cierto, System.out.println
funcionó.