Java FX дайвинг integerproperty - PullRequest
       2

Java FX дайвинг integerproperty

0 голосов
/ 04 октября 2018

Я пытаюсь связать текстовое поле со свойством, но оно выдает ошибку, см. Ниже.Спасибо

  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 голосов
/ 05 октября 2018

Как вы связываете двунаправленное уравнение?«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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...