Я использую NumberFormatter
и JFormattedTextField
, но .getValue()
не возвращает того же значения, которое видит пользователь.
Я думаю, что входная строка анализируется с использованием метода анализа NumberFormats, и я получаю Numberformat из NumberFormat.getNumberInstance();
с фактическим Locale. Так что я не думаю, что легко смогу расширить его и написать свой собственный метод разбора?
Например , если пользователь вводит 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, поскольку пользователь ввел недопустимое значение . 1033 *
Вот код, который я пробовал:
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());
}
});
Как получить то же значение, которое видит пользователь?