gwt event-handling addhandler

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ó.