2

利用しようとしています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);

/////2011年7月1日に追加されました。

次の完全なGWTの単純なコードも機能しません(Jasonのヒントが適用されています)。私を助けてください。ありがとう

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

3 に答える 3

9

GwtEvent.Typeイベント固有の一意のオブジェクトに基づいてイベントをディスパッチするために使用されます(オブジェクトの同等性--==はイベントタイプを照合するために使用されます)。CustomMouseMoveHandleryourをTypetoとして渡すと、saddHandlerに使用されるイベントタイプ以外のイベントタイプが示されますMouseMoveEvent(実際、この場合、各オブジェクトが異なるため、すべてCustomMouseMoveHandlerが異なるイベントに割り当てられます)。Type

ハンドラーで拡張する代わりに、(静的メソッドを使用して)それ自体からGwtEvent.Type<MouseMoveHandler>イベントを取得する必要があります。TypeMouseMoveEventgetType()

あなたの中で拡張しないGwtEvent.TypeでくださいCustomMouseMoveHandler

public class CustomMouseMoveHandler
  implements MouseMoveHandler
{
  ...
}

そして、ハンドラーを追加するには:

cp.addDomHandler(handler, MouseMoveEvent.getType());
于 2011-06-30T17:06:41.287 に答える
5

DomEventsは、addDomHandlerを使用して登録する必要があります。または、イベントタイプに応じてsinkEventsを登録する必要があります。addDomHandlerは、sinkEvents+addHandlerのショートカットです。

于 2011-07-01T14:05:53.843 に答える
4

これが私の問題を解決した方法です。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働いた。

于 2012-06-23T17:02:58.683 に答える