我在mi fxml文件中得到了类似的内容:
<TextField fx:id="id" onInputMethodTextChanged="#foo" prefWidth="200.0" promptText="" />
但是当我运行它时,我将TAB或鼠标移出TextField控件并且没有任何反应(“foo”未被调用)。
答案 0 :(得分:5)
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");
}
}
});
答案 1 :(得分:0)
我有同样的问题,即使使用Platform.isSupported(ConditionalFeature.INPUT_METHOD)== true
我使用setOnInputMethodTextChanged设置的事件处理程序未触发。
我担心使用TextField.textProperty.addListener(ChangeListener侦听器),因为ChangeListener.change()本身不能让您轻松访问触发事件的源节点。
我通过使用:
来解决final TextField field = new TextField("field");
field.textProperty.addListener(new ChangeListener() {
public void changed(ObservableValue observable, Object oldValue, Object newValue) {
dosomethingwith(field);
}
});
将字段声明为&#34; final&#34;允许我在ChangeListener.changed()
中访问change事件的源节点