2016年7月7日木曜日

JavaFX の ComboBox でキーイベント等をひろう

JavaFX の ComboBox でキーイベントをひろおうとすると、一段階工夫が必要になります。
ComboBox が内部に持つ TextField に対しての Listner 登録が必要になります。
例えば、次のような感じになります。
@FXML
private ComboBox<String> cmbbxSearchText;
(略)
    // ComboBox 内の TextField の文字列の変化
    cmbbxSearchText.getEditor().textProperty().addListener((observable, oldValue, newValue) -> {
        System.out.println("cmbbx text changed from " + oldValue + " to " + newValue);
    });
    // ComboBox 内の TextField での KeyPressed
    cmbbxSearchText.getEditor().setOnKeyPressed((event) -> {
        System.out.println("onKeyPressed:" + event);
    });
    // ComboBox 内の TextField での KeyTyped
    cmbbxSearchText.getEditor().setOnKeyTyped((event) -> {
        System.out.println("onKeyTyped:" + event);
    });

参考ページ
java - JavaFX - ComboBox listener for its texfield - Stack Overflow

ちなみに、上記サンプルの1つ目の ComboBox(内の TextField)の値の変化だけならば、
このページなどを見ると ComboBox の valueProperty() に対して Listener 登録すれば良いようです。

※備考
JavaFX に慣れた人ならば当たり前の話でしょうが、
各コントロールも内部的には Java(FX) Bean のプロパティとその監視・通知を行う Observer パターンを使って実装されています。
ですので、コントロールを使う側も、コントロール内部の変化等を知りたい場合には、該当のプロパティを探して、そこに Listener 登録するというのが一般的な実装になるようです。

この辺り、JavaFX 初心者がコントロールの操作について情報を調べる場合には、念頭に置いていると、ちょっとコツがつかめると思います。

0 件のコメント:

コメントを投稿