Как региональные настройки Windows влияют на приложение javafx - PullRequest
0 голосов
/ 22 февраля 2019

Я работаю над приложением javafx и заметил, что некоторые функции CSSstyle / double не работают должным образом, когда региональные настройки Windows были изменены (я из Эстонии).Когда я открываю окно программы, некоторые поля отключаются (выпадающие списки и датчики): enter image description here Отключить код:

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 все работает отлично: enter image description here Также, когда я вхожу в какое-либо текстовое поле Double in Sum, оно должно автоматически заполнять суммы part1-12: enter image description here Вот код, который позволяет вводить только дважды:

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));

После упаковки моего приложенияи установка на мой компьютер, все работает отлично.НО на компьютерах с разными региональными настройками у меня есть такая картина: после нажатия кнопки «Разблокировать» комбинированные списки и датчики все еще «светло-серые» (но работают, я могу выбрать другие варианты): enter image description here И когда явведите новую сумму, 1-12 частей суммы не заполняются автоматически.Как я понимаю, это как-то связано с десятичными символами Reginal или что-то вроде этого.Вопрос: как я могу сделать свое приложение независимым от региональных настроек машины?

1 Ответ

0 голосов
/ 03 марта 2019

Спасибо всем, спасибо @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));

Теперь все в порядке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...