ComboBox で Return/Enter キーの入力をひろうのに苦労したので、
そこのメモ。
検索すると
- OnAction のイベントハンドラーで処理できる
- ComboBox の getEditor() で取得できる内部の TextField のキーイベントの getCode() と KeyCode.ENTER を比較
1. の方法は、それで処理されるときもあれば、処理されないときもあるという動作が不確定。
2. の方法は、確かに OnKeyTyped の際にはイベント通知が来るが(ちなみに OnKeyPressed はダメだった)、ログ出ししてみるとなぜか getCode() した結果が UNDEFINED 値(KeyCode.ENTER との比較が true にならない)。
ということで、最終的にイベントのログ出し結果等から私が書いたコードは次のようになった。
comboBox.getEditor().setOnKeyTyped((event) -> {
System.out.println("ComboBox onKeyTyped:" + event);
if(event.getCode() == KeyCode.ENTER || event.getCharacter().equals("\n") || event.getCharacter().equals("\r")){
executeSelectedItem();
}
});
今のところ、ログやデバックでの動作を見る限り getCharacter() の "\r" との比較で上手く動作しています。
それ以外の比較は、環境や動作が変わった場合の保険。
(event.getCode() 値が KeyCode.ENTER になるのが正しい動作だと思うので)
もっとエレガントで正しい書き方があれば知りたい…
0 件のコメント:
コメントを投稿