GWT Widget.addHandler




event-handling (2)

DomEvents deve essere registrato usando addDomHandler, o devi sinkEvents per il loro tipo di evento. addDomHandler è una scorciatoia per sinkEvents + addHandler.

Sto cercando di utilizzare Widget.addHandler() . Tuttavia, il gestore non viene mai chiamato. Di seguito è riportato il mio codice di esempio. Cosa devo cambiare per risolvere questo problema?

Implementazione del mio gestore:

public class CustomMouseMoveHandler
  extends GwtEvent.Type<MouseMoveHandler>
  implements MouseMoveHandler
{
  @Override
  public void onMouseMove(MouseMoveEvent event) {
    System.out.println("----> onMouseMove.");
  }
}

Il mio 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);

///// Aggiunto il 01/07/2011.

Il seguente semplice codice GWT completo non funziona neanche (con il suggerimento di Jason applicato). Per favore aiutatemi. Grazie

 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 viene utilizzato per inviare eventi basati su un oggetto specifico e univoco (l'uguaglianza dell'oggetto - == - viene utilizzata per abbinare i tipi di evento). Passare il tuo CustomMouseMoveHandler come Type a addHandler indica un tipo di evento diverso da quello utilizzato per MouseMoveEvent s (In questo caso, infatti, ogni CustomMouseMoveHandler verrebbe assegnato a un Type evento diverso poiché ogni oggetto è diverso).

Invece di estendere GwtEvent.Type<MouseMoveHandler> nel gestore, è necessario ottenere il Type evento da MouseMoveEvent stesso (utilizzando il metodo statico getType() ).

Non estendere GwtEvent.Type in CustomMouseMoveHandler :

public class CustomMouseMoveHandler
  implements MouseMoveHandler
{
  ...
}

E per aggiungere il gestore:

cp.addDomHandler(handler, MouseMoveEvent.getType());