我正在使用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文本字段时,它应该自动填充part1-12的总和: 这是代码,只允许输入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十进制符号或类似的东西相关。 问题:如何使我的应用程序独立于机器区域设置?
答案 0 :(得分:0)
谢谢大家,谢谢@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));
现在一切正常。