【发布时间】:2012-01-24 06:27:23
【问题描述】:
在我的应用程序中,我想输入特定限制的数字(数量),因此使用了 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
我哪里错了?以及如何使它按我的预期工作。
根据 StanislavL 的建议进行更新:
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" 不应该被淘汰。
【问题讨论】:
标签: java swing number-formatting jformattedtextfield