在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中的内容是什么?
答案 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));