いくつかのボタンとともに、AnchorPane に TextField が埋め込まれています。TextField にはデフォルトでフォーカスがありません。これは、プロンプト テキストを表示するためです ( javafx 2 のテキスト フィールドのプロンプトテキストは、Java 7 の更新後にフォーカスを非表示にします- これは既知の問題のようです)。ユーザーが ENTER または ESCAPE 以外のキーを押したときに、TextField がフォーカスを受け取るようにします。AnchorPane.setOnKeyPressed() (およびボタンの onKeyPressed リスナー) にアタッチされた EventHandler を作成しました。これは、キーボード イベントでスイッチを実行し、デフォルトで次のようになります。
default:
Platform.runLater(new Runnable() {
@Override
public void run() {
myTxt.requestFocus();
myTxt.fireEvent(event);
}
});
これにより、フォーカスが TextField に送信されます。ただし、押したキーは実際には TextField に表示されません。つまり、入力すると
test
TextField はフォーカスを受け取りますが、
est
フィールドに現れます。アンカーペイン/ボタンと TextField の両方の KeyEvent リスナーにロギングを追加しました。
Oct 29, 2013 2:22:11 PM com.myapp.AppMainController$4 handle
INFO: Got key t at source Button[id=myBtn, styleClass=button]
Oct 29, 2013 2:22:11 PM com.myapp.AppMainController$6 handle
INFO: Got key t at source TextField[id=myTxt, styleClass=text-input text-field]
したがって、重要なイベントは TextField に到達することですが、ボックスには表示されません。入力を続けると、残りのテキストが表示されます。大文字の T に対して SHIFT-T のような組み合わせを入力してフォーカスを得ると、表示されます (Shift キーの押下が「失われた」ものであるようです)。手紙自体の代わりに)。
他の誰かがこれに遭遇しましたか?これはJavaFX2のバグですか、それとも何か間違っていますか? 参考までに、JavaFX 2.2.45 が含まれている Java 7u45 を使用しています。
編集 1: フォーカスがペインまたはボタンから切り替えられたかどうかに関係なく、フォーカスを TextField に切り替えたときにこれが発生することを明確にする必要があります。
編集2(解決策): 実際の問題は「Platform.runLater」ラッパーでした。「runLater」を使用せずにフォーカスをリクエストすると、キー イベントが期待どおりに表示されます。
default:
myTxt.requestFocus();