我想使用FX8 Spinner
控件,但我想将源绑定到一个IntegerProperty
int MIN = 0;
int MAX = 5000;
int STEP = 500;
IntegerProperty integerProperty = new SimpleIntegerProperty();
Spinner<Integer> spinner = new Spinner<>(MIN, MAX, STEP);
我知道绑定是通过绑定到值工厂中的valueProperty
来设置的。然而,这需要Property<Integer>
,我找不到在IntegerProperty
和Property<Integer>
之间进行转换的方法。
很明显,下面的代码会生成编译错误:
spinner.getValueFactory().valueProperty().bindBidirectional(integerProperty);
我需要为两个方向手动分配更改侦听器吗?肯定有更简洁的解决方案,可以使用 valueProperty
,这不可能是未预料到的情况。
bindBiDirectional
以绑定2个IntegerProperty
对象(这样我就不需要触及我正在使用的模型对象)。 - SeeMoreGainspinner.getValueFactory().valueProperty().bindBidirectional(integerProperty.asObject());
。仍然需要重新设计这段代码,因为存在“过早垃圾回收”问题,导致绑定无法正常工作。以下解决方案解决了这个问题:1.声明一个实例变量:private ObjectProperty<Integer> spinnerValue;
。2.初始化它:spinnerValue = integerProperty.asObject();
。3.使用它:spinner.getValueFactory().valueProperty().bindBidirectional(spinnerValue);
。 - SourceSeeker