【发布时间】:2015-08-27 06:33:43
【问题描述】:
我有一个 JFormattedTextField 和一个带有 Locale.US 的 NumberFormat。所以小数分隔符是点,分组分隔符是逗号。
现在我在此文本字段中键入字符串“1,23”并将焦点移至另一个组件。我希望字符串消失(就像我键入“a”而不是“1,23”时那样),因为在使用 Locale.US 时它显然不是数字的有效表示。但是文本字段中的文本改为“123”。
这是因为使用的NumberFormat在解析时不严格,直接忽略了逗号。
问题:在这种情况下,如何告诉NumberFormat 抛出ParseException,以便在将焦点移到另一个组件后文本字段将为空?
测试代码:
JDialog dialog = new JDialog();
JPanel panel = new JPanel(new BorderLayout());
dialog.getContentPane().add(panel);
NumberFormat nf = NumberFormat.getInstance(Locale.US);
JFormattedTextField textField = new JFormattedTextField(nf);
textField.setText("1,23");
panel.add(textField, BorderLayout.CENTER);
panel.add(new JButton("focus"), BorderLayout.EAST);
dialog.pack();
dialog.setVisible(true);
将焦点从文本字段移到按钮上,文本将变为“123”。
【问题讨论】:
-
这不是重复的。另一个问题是关于整数,而不是双精度数。这里的问题归结为一个过于宽松的 NumberFormat ,它不检查该位置是否允许使用逗号。看起来我们需要一个具有更严格检查的 NumberFormat 子类。
-
@RalfH:你是对的,这不是重复的。我已经编辑了问题以显示 JFormattedTextField 中 NumberFormat 的基本用法。
-
我怎样才能从这个问题中删除重复的标签?我想发布我自己的解决方案。
-
感谢您重新提出问题,但现在可以在stackoverflow.com/questions/33808144/… 下找到我的解决方案。
标签: java swing number-formatting jformattedtextfield