我正在使用NumberFormatter
和JFormattedTextField
,但.getValue()
不会返回与用户所看到的值相同的值。如何获得与用户从JFormattedTextField中看到的相同的值?
我认为输入字符串是使用NumberFormats parse-method解析的,我从NumberFormat.getNumberInstance();
获得Numberformat与实际的Locale。所以我不认为我可以轻松扩展它并编写我自己的分析方法?
在示例,如果用户键入1234.487
的getValue()
将返回: 1234.487
但用户将使用NumberFormat.getCurrencyInstance();
显示1,234.49
又如。用户类型1234.487
和getValue()
返回1234.487
但用户将显示$1,234.49
相反,我想如果格式化不能没有四舍五入格式化值产生一个ParseException的。同样的事情,如果用户输入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 2010-02-05 13:07:23