绑定Javafx焦点丢失

时间:2015-09-22 07:51:06

标签: javafx

在swing中,我们可以绑定组件和pojo,例如

org.jdesktop.beansbinding.Binding binding = org.jdesktop.beansbinding.Bindings.createAutoBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, wb, org.jdesktop.beansbinding.ELProperty.create("${TSB_NAME}"), edTSB, org.jdesktop.beansbinding.BeanProperty.create("text_ON_ACTION_OR_FOCUS_LOST"));
    bindingGroup.addBinding(binding);

我对FOCUS_LOST感兴趣。 JavaFX中的内容是什么?

1 个答案:

答案 0 :(得分:1)

我不知道JavaFX的任何第三方库与您在问题中引用的Swing具有完全相同的功能。 JavaFX具有用于观察和绑定属性的内置机制:但是您所描述的并不是真正的绑定,因为两个属性(POJO中的一个,TextField中的一个)并不总是具有相同的值:用户正在打字,在转移焦点之前,他们会有所不同。因此,您必须使用侦听器而不是绑定来实现它。

如果您使用JavaFX property pattern实施POJO,即您有类似

的内容
public class MyEntity {

    private final StringProperty text = new SimpleStringProperty();
    public StringProperty textProperty() {
        return text ;
    }
    public final String getText() {
        return textProperty().get();
    }
    public final void setText(String text) {
        textProperty().set(text);
    }

    // other properties...
}

然后您可以执行以下操作:

TextField textField = new TextField();
MyEntity entity = new MyEntity();

textField.focusedProperty().addListener((obs, wasFocused, isNowFocused) -> {
    if (! isNowFocused) {
        entity.setText(textField.getText());
    }
});
entity.textProperty().addListener((obs, oldText, newText) -> 
    textField.setText(newText));