首页 > 解决方案 > 如何在 JavaFX 微调器中设置小数位?

问题描述

我想让 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 时,我无法使用此值。我认为小数点有问题。我想将值形式用作###.###. 如何处理 JavaFXSpinner小数位?

标签: javafxspinner

解决方案


我解决了这个问题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);


推荐阅读