2017-08-11 51 views
3

在JavaFX中,有一個IntegerProperty類,該類繼承了返回BooleanBinding的方法,例如greaterThanlessThan。但是,不允許使用空值,因爲它將值存儲爲int(因此單獨的IntegerProperty類)。JavaFX:是否有整數屬性允許空值並提供像greaterThan和lessThan這樣的方法?

相反,ObjectProperty<Integer>允許空值,但不提供此類方法。

是否有具有這兩種的一種方法:允許而被空值能夠得到BooleanBinding(或類似)比較兩個屬性(也許使用Comparator,例如)?

回答

2

靜態方法IntegerProperty.integerProperty(Property<Integer>)Property<Integer>創建IntegerProperty並建立它們之間的雙向綁定。在這種情況下,您只有一個選項來處理Property<Integer>中的空值:它們被視爲零。

是否適合你的使用情況,那麼你可以這樣做:

Property<Integer> age = new SimpleObjectProperty<>(); 
BooleanBinding canVote = IntegerProperty.integerProperty(age).greaterThanOrEqualTo(18); 

否則,只使用標準的API,你需要手工創建綁定:

Property<Integer> age = new SimpleObjectProperty<>(); 
BooleanBinding canVote = Bindings.createBooleanBinding(() -> { 
    if (age.get() == null) { 
     return false ; 
    } else { 
     return age.get().intValue() >= 18 ; 
    } 
}, age); 

的其他選擇是使用(或寫...)第三方綁定庫。例如,使用ReactFX(反應性編程API爲JavaFX其中包含一些綁定API),你可以做

Property<Integer> age = new SimpleObjectProperty<>(); 
Val<Boolean> canVote = Val.map(age, a -> a >= 18); 

這裏canVoteVal<Boolean>ValObservableValue) 這是「空」如果age包含null ,否則相應地爲truefalse。你可以做

ObservableValue<Boolean> canVote = Val.map(age, a -> a >= 18).orElseConst(false); 

,迫使它有一個值,如果age包含null

相關問題