2009-08-06 5 views
21

コンポジットを拡張するgwtでカスタムウィジェットを作成しました。フォーカスパネルを使用しています.FocusPanelの場合は、ClickHandlerを追加しました。キーボードのlistnerを追加しました。Enterキークリックイベントを発生させる必要があります.GWTのコードを使用してクリックイベントをトリガーする手助けをすることができますか?gwtのコードからclickイベントを発生する

focusPanel.addKeyPressHandler(new KeyPressHandler() { 
      public void onKeyPress(KeyPressEvent event) { 
       if (event.getNativeEvent().getKeyCode() == KeyCodes.KEY_ENTER)  { 
        // TODO call onClick() method 
       } 
      } 
     }); 

おかげ

答えて

18

私はクリックイベントでこれを行っていませんが、このような変更イベントを行っています。

NativeEvent event = Document.get().createChangeEvent(); 
DomEvent.fireNativeEvent(event, this); 

[createClickEvent](http://google-web-toolkit.googlecode.com/svn/javadoc/1.6/com/google/gwt/dom/client/Document.html#createClickEvent(int,%20int,%20int,%20int,%20int,%20boolean,%20boolean,%20boolean,%20boolean))方法はしかし、より多くのパラメータを受け取ります。

public final NativeEvent createClickEvent(int detail, 
              int screenX, 
              int screenY, 
              int clientX, 
              int clientY, 
              boolean ctrlKey, 
              boolean altKey, 
              boolean shiftKey, 
              boolean metaKey) 
1

たぶん ClickListenerCollection.fireClick()何をしたいん。私はそれを使用していません

申し訳ありませんが、役に立たないかもしれません。代わりにwidget.delegateEventを見てください。

2

DLHによって記述された方法は、仕事と私はそれ何見当がつかない詳細引数(を除く必要があります)あなたはKeyPressEventで利用可能な他の引数を持っています。

もう1つの考えられる解決策は、エレメント上のネイティブJavaScript click()を呼び出すことです。これはボタンウィジェットで行いました。 enソース)。次のクラスのclick()メソッドを参照してください:http://code.google.com/p/cobogw/source/browse/trunk/widgets/src/main/java/org/cobogw/gwt/user/client/ui/Button.java)、特定のEvent2クラスを呼び出します。これは、clickメソッドのブラウザ固有のバージョンを実装しています。

この方法を使用するには、単に、あなたのプロジェクトにcobogwを提供jarファイルを追加Event.gwt.xmlが含まれており、あなたの方法でEvent2.fireClickEvent(getElement());を呼び出すかだけ

独自のプロジェクト内のクラスイベント2とイベントからコードを使用することができます

このソリューションを使用すると、プログラムでクリックイベントを発生させることもできます。

また、前述のButtonクラスのonBrowserEvent実装を見てください。これは、同じようにキーイベントを処理し、複数のキーイベントを発生させるという問題を回避します。 1クリックイベントを生成します。

20

私はこのコードを実行した:

if (event.getNativeEvent().getKeyCode() == KeyCodes.KEY_ENTER)  { 
    myButton.fireEvent(new GwtEvent<ClickHandler>() { 
     @Override 
     public com.google.gwt.event.shared.GwtEvent.Type<ClickHandler> getAssociatedType() { 
     return ClickEvent.getType(); 
     } 
     @Override 
     protected void dispatch(ClickHandler handler) { 
      handler.onClick(null); 
     } 
    }); 
} 

もちろん、別のイベントハンドラーの中にいるmyButtonはfinalまたはpublicでなければなりません。

+1

を私はそれが仕事をしてそれが正解だと思います。しかし、これは小さな効果のための多くのボイラープレートコードです。うまくいけば、ある日、GWTのテスト自動化にGoogleが直接それを組み込む予定です。 – Sebi

+0

ありがとうございました。わたしにはできる。 –

+0

ボタンでは動作しますが、メニューバーでは機能しません。:( – knocker

14

また、単純なJSNIメソッドを使用して行うこともできます。要素を渡すだけです。この方法にbutton.getElement()]:

public static native void clickElement(Element elem) /*-{ 
    elem.click(); 
}-*/; 
+1

ボタンでは動作しますがメニューバーでは動作しません: – knocker

2

ターゲットはあなただけでそのclick()メソッドを呼び出すことができるボタンである場合。

private void click(HasHandlers handlerSource) { 
    NativeEvent event = Document.get().createClickEvent(0, 0, 0, 0, 0, false, false, false, false); 
    DomEvent.fireNativeEvent(event, handlerSource); 
} 
0

あなたはちょうどこの操作を行うことができます:それ以外の場合は、あなたがこのような何か行うことができます

focusPanel.fireEvent(new ClickEvent(){}); 
+0

'ClickEvent()'は 'com.google.gwt.event.dom .client.ClickEvent ' –

+0

@GlenPierce正しいですが、保護されたコンストラクタを呼び出すのではなく、新しい匿名の内部クラスを作成し、コンストラクタを使用しています。 – Craigo

関連する問題