あるフィールドに対して、入力内容の制御を行おうとしていた。
制御内容を記述したメソッドを作成し、setOnInputMethodTextChanged()
を使ってメソッドが実行されるようにしたかったが上手く動かない。
全く同じコードを他の人に試してもらうと正常に動作した。どうしてか。
調べた内容だと、このようなことが原因に当たることがらしい。
- テキスト入力メソッドがプラットフォームで使用可能であるか
参考元:https://stackoverflow.com/questions/12956061/javafx-oninputmethodtextchanged-not-called-after-focus-is-lost
Platform.isSupported(ConditionalFeature.INPUT_METHOD) //true ならOK
- IMEがオンではない場合は、メソッドが動かない
参考元:https://teratail.com/questions/23236
今のところ原因はわかっていないが、個人で使う範囲でない場合はsetOnInputMethodTextChanged() を使用した開発はやめておいたほうがよさそう。
他に入力イベントを拾うメソッドとして、
onKeyPressed //キーが押されるタイミング
onKeyReleased //キーが放されるタイミング
onKeyTyped //キーがタイプされるタイミング
こんなものもあった。
Eventクラスから、EventTypeを判定して処理を行うものも。
参考元:https://docs.oracle.com/javase/jp/8/javafx/api/javafx/event/Event.html
他何か情報があれば、随時追記していく。