5

我在 mi fxml 文件中得到了类似的东西:

<TextField fx:id="id" onInputMethodTextChanged="#foo" prefWidth="200.0" promptText="" />

但是当我运行它时,我 TAB 或鼠标移出 TextField 控件并且没有任何反应(“foo”没有被调用)。

4

2 回答 2

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");
        }
    }
});
于 2012-10-18T14:04:59.773 回答
0

我遇到了同样的问题,即使是 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() 中更改事件的源节点

于 2015-02-06T11:15:31.187 回答