GWT Widget.addHandler - PullRequest
       31

GWT Widget.addHandler

2 голосов
/ 30 июня 2011

Я пытаюсь использовать Widget.addHandler(). Однако обработчик никогда не вызывается. Ниже приведен мой пример кода. Что мне нужно изменить, чтобы это исправить?

Реализация моего обработчика:

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

Мой 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);
1010 * * ///// Добавлено 07.01.2011.

Следующий полный простой код GWT также не работает (с примененной подсказкой Джейсона). Пожалуйста, помогите мне. Спасибо

 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");
       }
}

Ответы [ 3 ]

9 голосов
/ 30 июня 2011

GwtEvent.Type используется для отправки событий на основе конкретного и уникального объекта (равенство объектов - == - используется для сопоставления типов событий). Передача CustomMouseMoveHandler в качестве Type к addHandler указывает на тип события, отличный от того, который использовался для MouseMoveEvent s (Действительно, в этом случае каждый CustomMouseMoveHandler будет назначен другому событию Type, поскольку каждый объект отличается).

Вместо расширения GwtEvent.Type<MouseMoveHandler> в вашем обработчике вам нужно получить событие Type от самого MouseMoveEvent (используя статический метод getType()).

Не расширяйте GwtEvent.Type в вашем CustomMouseMoveHandler:

public class CustomMouseMoveHandler
  implements MouseMoveHandler
{
  ...
}

И добавить обработчик:

cp.addDomHandler(handler, MouseMoveEvent.getType());
4 голосов
/ 23 июня 2012

Вот как я решил свою проблему.Я хотел добавить обработчики к NumberLabel .Вот что сработало:

    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());

Обработка как виджет сделала свое дело.

Кстати, System.out.println сработало.

4 голосов
/ 01 июля 2011

DomEvents должны быть зарегистрированы с использованием addDomHandler, или вы должны использовать sinkEvents для их типа события. addDomHandler - это ярлык для sinkEvents + addHandler.

...