В моем приложении я хочу ввести числа (суммы) до определенного предела, и, следовательно, использовал JFormattedTextField. Предел как "12345678.99", то есть 8 цифр перед "." и 2 после "." или так далее. Это мой код реализации, но он не дает ожидаемого результата.
startBalTxt.setFormatterFactory(new javax.swing.text.DefaultFormatterFactory(new javax.swing.text.NumberFormatter(new java.text.DecimalFormat("########.##"))));
startBalTxt.setText(resourceMap.getString("startBalTxt.text")); // NOI18N
startBalTxt.setFont(Utility.getTextFont());
startBalTxt.setName("startBalTxt"); // NOI18N
INPUT RESULT
"12345678905.99" => "12345678906" ==> Should give "12345678.99" or "12345679.99"
"12345678.555" => "12345678.56" ==> CORRECT
"1234567890123456" => "1234567890123456" ==> Absolutely wrong in all aspects
Куда я иду не так? И как заставить это работать так, как я этого ожидаю.
ОБНОВЛЕНИЯ, ПРЕДЛАГАЕМЫЕ СТАНИСЛАВОМ:
numberFormat = (DecimalFormat) DecimalFormat.getNumberInstance();
numberFormat.setMaximumFractionDigits(2);
numberFormat.setMaximumIntegerDigits(8);
numberFormat.setMinimumFractionDigits(0);
numberFormat.setMinimumIntegerDigits(2);
nfr = new NumberFormatter(numberFormat);
initComponents();
myParent = parent;
this.startBalTxt.setFormatterFactory(new javax.swing.text.DefaultFormatterFactory(nfr));
Results -> 4562147896.45 == > 62,147,896.45
Он соблюдает установленный предел, но он удаляет предыдущие цифры, а не последующие. Я имею в виду в 4562147896,45 вместо "45" "96" не должно быть исключено.