コンポジットを拡張するカスタムウィジェットをgwtで作成しました。その中でフォーカスパネルを使用しています。FocusPanelには、ClickHandlerを追加しました。次に、キーボードリスナーを追加しました。Enterキーを押すと、クリックイベントがトリガーされます。 GWTのコードを使用してクリックイベントをトリガーする方法
focusPanel.addKeyPressHandler(new KeyPressHandler() {
public void onKeyPress(KeyPressEvent event) {
if (event.getNativeEvent().getKeyCode() == KeyCodes.KEY_ENTER) {
// TODO call onClick() method
}
}
});
ありがとう
クリックイベントではこれを行っていませんが、このような変更イベントを行っています。
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)
私はこのコードを実行しました:
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でなければならず、別のイベントハンドラーの内部にいます。
簡単なJSNIメソッドを使用してそれを行うこともできます。要素を渡すだけです[例: button.getElement()]をこのメソッドに追加します。
public static native void clickElement(Element elem) /*-{
elem.click();
}-*/;
ターゲットがボタンの場合は、そのclick()
メソッドを呼び出すだけです。それ以外の場合は、次のようなことができます。
private void click(HasHandlers handlerSource) {
NativeEvent event = Document.get().createClickEvent(0, 0, 0, 0, 0, false, false, false, false);
DomEvent.fireNativeEvent(event, handlerSource);
}
KeyPressHandlerは、Enterなどの特別なキーではFirefoxで機能しないことに注意してください。KeyUpまたはKeyDownを使用する必要があります。
http://code.google.com/p/google-web-toolkit/issues/detail?id=5558#c6
DLHによって記述されたメソッドは機能するはずであり、詳細引数(それが何のためにあるのか私にはわかりません)を除いて、KeyPressEventで使用可能な他の引数があります。
別の可能な解決策は、要素のネイティブJavaScript click()
を呼び出すことです。これはボタンウィジェットで行いました(これはオープンソースとして利用できます)。次のクラスのclick()
メソッドを参照してください。 http://code.google.com/p/cobogw/source/browse/trunk/widgets/src/main/Java/org/cobogw/ gwt/user/client/ui/Button.Java )は、特定のEvent2クラスを呼び出し、ブラウザー固有のバージョンのクリックメソッドを実装します。
このメソッドを使用するには、 cobogw で提供されるjarファイルをプロジェクトに追加し、_Event.gwt.xml
_を含めて、メソッドにEvent2.fireClickEvent(getElement());
を呼び出すか、コードのみを使用しますあなた自身のプロジェクトのクラスEvent2とEventから
このソリューションでは、プログラムでクリックイベントを発生させることもできます。
上記のButtonクラスのonBrowserEvent
実装も確認してください。これは、キーイベントを同様の方法で処理し、必要な場合にのみ複数のキーイベントの発生の問題を回避するためです。 1つのクリックイベントを生成します。
多分 ClickListenerCollection.fireClick() はあなたが望むことをします。使ったことないけど
申し訳ありませんが、これは非推奨であり、おそらく役に立たないこともあります。代わりに、widget.delegateEventを見てください。
あなたはこれを行うことができます:
focusPanel.fireEvent(new ClickEvent(){});