绑定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中是怎么回事?

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

如果你使用JavaFX属性模式实现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));

最新更新