我想使用FX8 Spinner
控件,但我想将源绑定到IntegerProperty
int MIN = 0;
int MAX = 5000;
int STEP = 500;
IntegerProperty integerProperty = new SimpleIntegerProperty();
Spinner<Integer> spinner = new Spinner<>(MIN, MAX, STEP);
我知道绑定是通过绑定到Value Factory中的valueProperty
来设置的。但是这需要Property<Integer>
,我无法在IntegerProperty
和Property<Integer>
之间进行投射。
显然下面会产生编译错误:
spinner.getValueFactory().valueProperty().bindBidirectional(integerProperty);
我是否需要为两个方向手动分配更改侦听器?肯定有一个使用valueProperty
的更简洁的解决方案,这不可能是一种无法预料的情况。
答案 0 :(得分:6)
您可以包装ObjectProperty:
ObjectProperty<Integer> objectProp = new SimpleObjectProperty<>(MIN);
IntegerProperty integerProperty = IntegerProperty.integerProperty(objectProp);
Spinner<Integer> spinner = new Spinner<>(MIN, MAX, STEP);
spinner.getValueFactory().valueProperty().bindBidirectional(objectProp);
IntegerProperty.integerProperty创建了一个与其包装的属性双向连接的属性。
答案 1 :(得分:0)
好吧,现在已经晚了,但让我为其他人提出其他建议。您可以简单地在您的“integerProperty”上调用 asObject()。这会将您发送回 ObjectProperty 值。
int MIN = 0;
int MAX = 5000;
int STEP = 500;
IntegerProperty integerProperty = new SimpleIntegerProperty();
Spinner<Integer> spinner = new Spinner<>(MIN, MAX, STEP);
spinner.getValueFactory().valueProperty().bindBidirectional(integerProperty.asObject());