如何在 JavaFX 微调器中设置小数位?
How can I set decimal places in JavaFX spinner?
我想使 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
小数位?
我用 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);
我想使 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
小数位?
我用 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);