java - JFormattedTextField 值设置为 Float,掩码设置为 ##,##

标签 java swing jformattedtextfield

是否可以将 JFormatterTextField 的 MaskFormatter 设置为 ##,## 并将 JFormatterTextField 的值类型设置为 Float?我尝试使用默认格式化程序工厂的以下掩码,但它不起作用,并且 getValue().getClass() 给了我 java.lang.String

DefaultFormatterFactory dff = new DefaultFormatterFactory();
mf = new MaskFormatter("##,##);
mf.setValueClass(Float.TYPE);
dff.setDefaultFormatter(mf);
field.setFormatterFactory(dff);

数字格式的问题是它没有为我屏蔽该字段。

PS。我的默认系统配置使用“,”作为“.”在英语中。所以这不是问题,我带它只是为了精确。

最佳答案

您在这里遇到了 JFormattedTextField 的一些限制。

如果使用 DecimalFormat http://docs.oracle.com/javase/7/docs/api/java/text/DecimalFormat.html您可以将显示设置为您喜欢的外观,但它不会严格强制用户输入的内容。返回的结果将是一个数字。

如果您使用 MaskFormatter,那么您会得到严格的强制执行,但返回的值是一个字符串。

当您需要结果时,您可以使用 MaskFormatter 并将其简单地传递给 Float.valueOf(str) 。另一种方法是实现您自己的格式对象或监听文本字段和/或其支持文档提供的某些事件,并直接对用户输入进行自己的控制。

关于java - JFormattedTextField 值设置为 Float,掩码设置为 ##,##,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20425959/

相关文章:

java - 为什么我不能只执行 node = node.next 来迭代链表?

java - 哪个线程在并发线程中首先完成?

Java Swing - 闪烁的 Canvas 图形

java - GridBagLayout 未将组件放置在页面开头

java - JFormattedTextField 插入符号在焦点上的位置

java - 对于具有一种实现的接口(interface),我如何才能直接进入该实现?

java - Spring Boot 无法将 string 类型转换为 long 类型

java - 空白弹出菜单和组合框

java - Masked JFormattedTextField 防止删除斜杠字符

java - 将java中的日期格式从ddMMyyyy更改为dd-MM-yyyy