Как установить десятичные разряды в счетчике JavaFX? - PullRequest
1 голос
/ 07 мая 2019

Я хочу сделать спиннер JavaFX с 3 десятичными знаками как двойное значение, поэтому я просто сделал Spinner следующим образом:

Spinner<Double> spinner = new Spinner<Double>();
SpinnerValueFactory<Double> valueFactory =
    new SpinnerValueFactory.DoubleSpinnerValueFactory(0, 512, 51.197, 1);
spinner.setValueFactory(valueFactory);
spinner.setEditable(true);

Я только что сделал спиннер с начальным значением 51,197, но когда язапустить этот код, начальное значение 51,2;и когда я редактирую счетчик как 52.666, я не могу использовать это значение.Я думаю, что десятичное место является проблемой.Я хочу использовать форму значения как ###.###.Как я могу обработать JavaFX Spinner десятичное место?

1 Ответ

2 голосов
/ 08 мая 2019

Я решил эту проблему с StringConverter.

StringConverter<Double> doubleConverter = new StringConverter<Double>() {
private final DecimalFormat df = new DecimalFormat("###.###");
@Override
public String toString(Double object) {
    if (object == null) {return "";}
    return df.format(object);}
@Override
public Double fromString(String string) {
    try {
        if (string == null) {return null;}
        string = string.trim();
        if (string.length() < 1) {return null;}     
        return df.parse(string).doubleValue();
    } catch (ParseException ex) {throw new RuntimeException(ex);}
    }
};

Spinner<Double> spinner = new Spinner<Double>();
SpinnerValueFactory<Double> valueFactory = new SpinnerValueFactory.DoubleSpinnerValueFactory(0, 512, 51.197, 1);
spinner.setValueFactory(valueFactory);
spinner.setEditable(true);

SpinnerValueFactory.setConverter(doubleConverter);

...