【发布时间】:2019-02-22 14:56:01
【问题描述】:
我正在开发 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 中一切正常: 此外,当我在 Sum 文本字段中输入一些 Double 时,它应该自动填充 part1-12 总和: 这是代码,只允许输入双精度:
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 个部分的总和不会自动填充。 据我了解,它以某种方式与地区十进制符号或类似的东西有关。 问题:如何使我的应用程序独立于机器区域设置?
【问题讨论】:
-
您使用的是什么版本的 JavaFX?存在一个影响 JavaFX 10 的错误,该错误与禁用节点的无效呈现有关 —JDK-8204949。虽然我认为这与区域设置无关(请参阅this question)。
-
@Slaw 谢谢你,这有助于部分渲染,但部分 Double 计算问题仍然存在
-
您能否edit 将代码改写为minimal reproducible example 来演示问题(即一个小示例应用程序)?另外,哪些语言环境有效,哪些无效?
标签: java javafx regional-settings