我正在研究javafx应用程序并且我注意到,当Windows区域设置已更改时(我来自爱沙尼亚),某些CSSstyle / double函数无法正常工作。当我打开程序窗口时,某些字段被禁用(组合框和日期选择器):禁用代码:
public void lockElements() {
policyTypeCombo.setDisable(true);
insurerCombo.setDisable(true);
clientCombo.setDisable(true);
startDate.setDisable(true);
}
单击“解锁”按钮后,此代码有效:
@FXML
public void unlockElements() {
policyTypeCombo.setDisable(false);
insurerCombo.setDisable(false);
startDate.setDisable(false);
}
这一切都非常简单,在我的IntellijIdea中一切正常:当我输入一些Double in Sum文本字段时,它应该自动填充part1-12 sum:这是代码,允许只输入double:
sumText.textProperty().addListener(new ChangeListener<String>() {
@Override
public void changed(ObservableValue<? extends String> observable, String oldValue, String newValue) {
if (!newValue.matches("\\d{0,7}([\\.]\\d{0,4})?")) {
sumText.setText(oldValue);
}
}
});
这是代码的一部分,填充其他总和
double sum = Double.valueOf(sumText.getText());
double part = sum / 12d;
part1Sum.setText(String.format("%.2f", part));
part2Sum.setText(String.format("%.2f", part));
part3Sum.setText(String.format("%.2f", part));
part4Sum.setText(String.format("%.2f", part));
part5Sum.setText(String.format("%.2f", part));
part6Sum.setText(String.format("%.2f", part));
part7Sum.setText(String.format("%.2f", part));
part8Sum.setText(String.format("%.2f", part));
part9Sum.setText(String.format("%.2f", part));
part10Sum.setText(String.format("%.2f", part));
part11Sum.setText(String.format("%.2f", part));
part12Sum.setText(String.format("%.2f", part));
打包我的应用程序并在我的计算机上安装后,一切正常。但是在具有不同区域设置的计算机上我有这样的图片:点击解锁按钮后,组合框和日期选择器仍然是“浅灰色”(但工作,我可以选择其他选项):当我输入新的总和时,1-12个零件总和不会自动填写。据我了解,它与Reginal十进制符号或类似的东西有某种关系。问题:如何让我的应用独立于机器区域设置?
谢谢大家,谢谢@Slaw。我通过使用BigDecimal解决了这个问题。代码是:
double sum = Double.valueOf(sumText.getText());
double part = sum / 12d;
part1Sum.setText(String.format("%.2f", part));
part2Sum.setText(String.format("%.2f", part));
part3Sum.setText(String.format("%.2f", part));
part4Sum.setText(String.format("%.2f", part));
part5Sum.setText(String.format("%.2f", part));
part6Sum.setText(String.format("%.2f", part));
part7Sum.setText(String.format("%.2f", part));
part8Sum.setText(String.format("%.2f", part));
part9Sum.setText(String.format("%.2f", part));
part10Sum.setText(String.format("%.2f", part));
part11Sum.setText(String.format("%.2f", part));
part12Sum.setText(String.format("%.2f", part));
我改成了:
int scale = 2;
double sum = BigDecimal.valueOf(Double.valueOf(sumText.getText()) / 12d).setScale(scale, BigDecimal.ROUND_HALF_UP).doubleValue();
part1Sum.setText(Double.toString(sum));
part2Sum.setText(Double.toString(sum));
part3Sum.setText(Double.toString(sum));
part4Sum.setText(Double.toString(sum));
part5Sum.setText(Double.toString(sum));
part6Sum.setText(Double.toString(sum));
part7Sum.setText(Double.toString(sum));
part8Sum.setText(Double.toString(sum));
part9Sum.setText(Double.toString(sum));
part10Sum.setText(Double.toString(sum));
part11Sum.setText(Double.toString(sum));
part12Sum.setText(Double.toString(sum));
现在一切都好。