在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));