如何使JFormattedTextField接受不带小数点的整数(逗号)?

Sal*_*eek 3 java swing integer number-formatting jformattedtextfield

我曾经JFormattedTextFieldNumberFormat这种方式:

-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()为您所做的一部分.


Sal*_*eek 1

我找到了解决问题的方法;这里是:

确切的问题是,当我使用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预期的形式。

问候

  • 我不建议这样做,因为您依赖于特定的默认区域设置。如果您在具有不同区域设置的计算机上使用该程序,您将获得不同的分隔符(“.”表示德国,“ ”表示法语等)。链接的问题包含更好的答案! (3认同)