Я использую NumberFormatter
и JFormattedTextField
, но .getValue()
не возвращает то же значение, что и пользователь.Как получить то же значение, что пользователь видит из JFormattedTextField?
Я думаю, что входная строка анализируется с использованием метода parse-метода NumberFormats, и я получаю Numberformat от NumberFormat.getNumberInstance();
с фактической локалью. Поэтому я не думаю, что я могу легко расширить его и написать свой собственный метод анализа?
В примере, если пользователь 1234.487
getValue()
вернется: 1234.487
, но пользователь будет отображаться 1,234.49
Другой пример, используя NumberFormat.getCurrencyInstance();
. Типы пользователей 1234.487
и getValue()
вернутся 1234.487
, но пользователь будет отображаться $1,234.49
Вместо, Я хочу ParseException генерироваться, если Formatter не может форматировать значения без округления. То же самое, если пользователь набирает 4.35b6
, по умолчанию форматтер будет отображать 4.35
, и значение будет 4.35
, но я хочу исключение ParseException, потому что пользователь напечатал недействительным значение.
Вот код, который я попытался с:
NumberFormat nf = NumberFormat.getNumberInstance();
nf.setMaximumFractionDigits(2);
nf.setMinimumFractionDigits(2);
final JFormattedTextField ftf = new JFormattedTextField(nf);
ftf.setValue(new BigDecimal("1234.50"));
// Print the value from ftf
final JTextField txt = new JTextField(12);
txt.addFocusListener(new FocusAdapter() {
public void focusGained(FocusEvent e) {
txt.setText(ftf.getValue().toString());
}
});
Как получить то же самое значение, что и пользователь видит?
Этот вопрос связан и улучшит решение: http: // stackoverflow.com/questions/1680120/javas-decimalformat-how-to-reject-invalid-input-with-grouped-decimals – Jonas