Java FX diving integerproperty



我正在尝试将文本字段与属性绑定,但它给出了 错误,请参阅下文。谢谢

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)

如何双向绑定到方程? "速率/除数"不是您可以为其赋值的东西。 出于同样的原因,代码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);