mifxmlファイルで次のようなものを取得しました。
<TextField fx:id="id" onInputMethodTextChanged="#foo" prefWidth="200.0" promptText="" />
しかし、それを実行すると、TextFieldコントロールからTabキーまたはマウスで移動しても、何も起こりません( "foo"は呼び出されません)。
のonInputMethodTextChanged
プロパティは、がプラットフォームでサポートされているTextField
場合にのみ適用されます。ConditionalFeature.INPUT_METHOD
これを確認するには
Platform.isSupported(ConditionalFeature.INPUT_METHOD)
ユーザーがテキストフィールドからフォーカスアウトしているときに何らかの作業を行おうとしている場合は、
textField.focusedProperty().addListener(new ChangeListener<Boolean>() {
@Override
public void changed(ObservableValue<? extends Boolean> observable, Boolean oldValue, Boolean newValue) {
if(!newValue) {
System.out.println("Focusing out from textfield");
}
}
});
Platform.isSupported(ConditionalFeature.INPUT_METHOD)== trueでも、同じ問題が発生しました
setOnInputMethodTextChangedで設定したイベントハンドラーが起動しませんでした。
ChangeListener.change()自体では、イベントをトリガーしたソースノードに簡単にアクセスできないため、TextField.textProperty.addListener(ChangeListener listener)の使用について懸念していました。
私は以下を使用して回避しました:
final TextField field = new TextField("field");
field.textProperty.addListener(new ChangeListener() {
public void changed(ObservableValue observable, Object oldValue, Object newValue) {
dosomethingwith(field);
}
});
フィールドを「final」として宣言すると、ChangeListener.changed()内の変更イベントのソースノードにアクセスできるようになりました。