2015-09-22 87 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

它不能用綁定來完成,因爲這些值有時是不同的。無論如何,一個綁定被實現爲一個或多個監聽器 –