2014-01-30 32 views
7

這段代碼(JavaFX)。如何綁定兩個不同的JavaFx屬性:String和Double(使用StringConverter)?

StringProperty sp; 
DoubleProperty dp; 

StringConverter<Double> converter = new DoubleStringConverter();  

Bindings.bindBidirectional(sp, dp, converter); 

我得到的編譯錯誤(在Eclipse IDE)

這是方法簽名:

public static <T> void bindBidirectional(Property<String> stringProperty, Property<T> otherProperty, StringConverter<T> converter) 

但如果我刪除參數化(字符串轉換),那麼我只得到警告和代碼作品。

StringConverter converter = new DoubleStringConverter();  

我想避免使用原始類型的泛型,這樣我就不必在我的IDE中禁止警告。

所以問題是:
什麼是寫這段代碼的正確模式?

回答

19

這可能是JavaFX屬性中的一個小「陷阱」。如果仔細觀察簽名:

static <T> void bindBidirectional(Property<java.lang.String> stringProperty, 
    Property<T> otherProperty, StringConverter<T> converter) 

轉換器的參數必須與屬性的參數匹配。但是(這裏的surprize)DoubleProperty執行Property<Number>,因此在bindBidirectional中不匹配。幸運的是,解決方法很簡單:使用NumberStringConverter

StringProperty sp = ...; 
DoubleProperty dp = ...; 
StringConverter<Number> converter = new NumberStringConverter(); 
Bindings.bindBidirectional(sp, dp, converter); 

你得到,你可以指定轉換格式的額外的好處。

+5

有沒有辦法做到這一點與單向綁定? – ZbyszekKr

相關問題