我正在尝试将文本字段与属性绑定,但是它给了 错误,请参见下文。谢谢
private static final IntegerProperty DIVISOR = new SimpleIntegerProperty(32);
rateTextField.textProperty().bindBidirectional(params.rateProperty().divide(DIVISOR), new NumberStringConverter()); //bindBidirectional(javafx.beans.binding.StringBinding, javafx.util.converter.NumberStringConverter)
答案 0 :(得分:2)
如何双向绑定方程式?您不能为“ rate / DIVISOR”分配值。出于同样的原因,代码rate / 32 = newRate;
无法编译。
您可以做的是使用TextFormatter并使用侦听器代替绑定:
NumberStringConverter converter = new NumberStringConverter();
TextFormatter<Number> formatter = new TextFormatter<>(converter);
params.rateProperty().addListener(
(o, old, rate) -> formatter.setValue(rate.doubleValue() / DIVISOR.get()));
formatter.valueProperty().addListener(
(o, old, rate) -> params.setRate(rate.doubleValue() * DIVISOR.get()));
rateTextField.setTextFormatter(formatter);
如果DIVISOR从未更改,则可以将其设置为原始int而不是属性:
private static final int DIVISOR = 32;
// ...
NumberStringConverter converter = new NumberStringConverter();
TextFormatter<Number> formatter = new TextFormatter<>(converter);
params.rateProperty().addListener(
(o, old, rate) -> formatter.setValue(rate.doubleValue() / DIVISOR));
formatter.valueProperty().addListener(
(o, old, rate) -> params.setRate(rate.doubleValue() * DIVISOR));
rateTextField.setTextFormatter(formatter);