【问题标题】:Binding Javafx on focus lost将 Javafx 绑定到焦点丢失
【发布时间】:2015-09-22 07:51:06
【问题描述】:

在 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 的开发人员没有用处。请具体说明您提出问题的目的。 Node 有一个 focusProperty 可用于绑定。你想对失去焦点做什么?
  • 我想在文本字段失去焦点时执行绑定。
  • 当焦点从文本字段中丢失时,您想要执行的任务是什么?
  • 当目标对象(pojo)中的某些内容发生更改时,需要更改文本字段中的文本。如果 textfield 失去焦点,则在 pojo 中更改字段,但仅在失​​去焦点时。

标签: javafx


【解决方案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));

【讨论】:

  • 谢谢。我知道它可以在没有绑定的情况下完成。
  • 无法通过绑定来完成,因为有时值不同。无论如何,绑定都是作为一个或多个侦听器实现的
猜你喜欢
  • 2014-11-15
  • 1970-01-01
  • 1970-01-01
  • 2017-11-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-18
  • 1970-01-01
相关资源
最近更新 更多