2016年7月12日火曜日

JavaFX の ComboBox で Return/Enter キーの入力をひろう

JavaFX の ComboBox でキーイベント等をひろうの続きっぽい内容ですが、
ComboBox で Return/Enter キーの入力をひろうのに苦労したので、
そこのメモ。

検索すると

  1. OnAction のイベントハンドラーで処理できる
  2. 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 件のコメント:

コメントを投稿