Java FX跳水整数属性

时间:2018-10-04 19:03:54

标签: java javafx

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

  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)

1 个答案:

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