2015-09-22 56 views
0

在摇摆,我们可以绑定组件和POJO例如焦点绑定的JavaFX失去

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

您发布的代码片段是没有用JavaFX的唯一开发商。请具体化你的问题的目的。 'Node'有一个'focusProperty',可以在绑定中使用。你想在重点上失去什么? –

+0

我想在焦点从文本字段丢失时执行绑定。 – DmitriyAntonov

+0

当焦点从文本字段丢失时,您想要执行的任务是什么? – ItachiUchiha

回答

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)); 
+0

谢谢。我知道它可以在没有约束力的情况下完成。 – DmitriyAntonov

+0

它不能用绑定来完成,因为这些值有时是不同的。无论如何,一个绑定被实现为一个或多个监听器 –