Sal*_*eek 3 java swing integer number-formatting jformattedtextfield
我曾经JFormattedTextField用NumberFormat这种方式:
-Creat一个JFormattedTextFieldrefernce
JFormattedTextField integerField;
Run Code Online (Sandbox Code Playgroud)
-创建NumberFormatrefernce
NumberFormat integerFieldFormatter;
Run Code Online (Sandbox Code Playgroud)
- 在构造函数中:
integerFieldFormatter = NumberFormat.getIntegerInstance();
integerFieldFormatter.setMaximumFractionDigits(0);
integerField = new JFormattedTextField(integerFieldFormatter );
integerField.setColumns(5);
Run Code Online (Sandbox Code Playgroud)
..........
我打算只使用整数,但是当我键入1500之类的数字时,它会在失去焦点后转换为1,500,抛出异常这是它的第一行:
线程"AWT-EventQueue-0"中的异常java.lang.NumberFormatException:对于输入字符串:"1,500"
当我使用JTextField而不是JFormattedTextField正常接受的所有整数时,但我想要使用的原因JFormattedTextField是受益于其输入限制优势.
小智 9
我意识到这是一个古老的问题,但我在同一个问题上偶然发现了它.由于其他答案对我来说似乎是变通,我仔细研究了NumberFormat方法.
我发现最简单的方法实际上是简单地停用NumberFormat实例上的分组:
NumberFormat integerFieldFormatter = NumberFormat.getIntegerInstance();
integerFieldFormatter.setGroupingUsed(false);
Run Code Online (Sandbox Code Playgroud)
这样,文本字段输出中不会出现组分隔符.
当然,您也无法将它们用于输入,但这不是问题所针对的,对吧?
同样对于NumberFormat的整数实例,您不需要显式setMaximumFractionDigits(0),因为这是getIntegerInstance()为您所做的一部分.
我找到了解决问题的方法;这里是:
确切的问题是,当我使用JFormattedTextFieldwith时NumberFormat,JFormattedTextField在任何接下来的 3 位数字之前添加逗号 ','
1000 渲染为 1,000
10000 呈现为 10,000
1000000 渲染为 1,000,000
当我从 JFormattedTextField 读取整数值时使用这行代码
int intValue = Integer.parseInt(integerField.getText());
Run Code Online (Sandbox Code Playgroud)
逗号作为字符串的一部分被读取;1000 读取为 1,000,并且该字符串值无法转换为整数值,因此会抛出异常。
老实说,解决方案就在这个答案中,但我会在这里重复一遍
使用str.replaceAll(",","")
int intValue = Integer.parseInt(integerField.getText().replaceAll(",", ""));
Run Code Online (Sandbox Code Playgroud)
这将替换返回字符串中的任何逗号字符',',并将正常转换为int预期的形式。
问候
| 归档时间: |
|
| 查看次数: |
14005 次 |
| 最近记录: |