我在 mi fxml 文件中得到了类似的东西:
<TextField fx:id="id" onInputMethodTextChanged="#foo" prefWidth="200.0" promptText="" />
但是当我运行它时,我 TAB 或鼠标移出 TextField 控件并且没有任何反应(“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 设置的事件处理程序没有触发。
我担心使用 TextField.textProperty.addListener(ChangeListener listener) 因为 ChangeListener.change() 本身并不能让您轻松访问触发事件的源节点。
我使用以下方法解决了问题:
final TextField field = new TextField("field");
field.textProperty.addListener(new ChangeListener() {
public void changed(ObservableValue observable, Object oldValue, Object newValue) {
dosomethingwith(field);
}
});
将字段声明为“最终”允许我访问 ChangeListener.changed() 中更改事件的源节点