Spinner <integer>绑定到IntegerProperty

时间:2016-03-07 03:55:22

标签: java javafx-8

我想使用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>,我无法在IntegerPropertyProperty<Integer>之间进行投射。

显然下面会产生编译错误:

spinner.getValueFactory().valueProperty().bindBidirectional(integerProperty);

我是否需要为两个方向手动分配更改侦听器?肯定有一个使用valueProperty的更简洁的解决方案,这不可能是一种无法预料的情况。

2 个答案:

答案 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());