JFormattedTextField值为Float,掩码为##,##

时间:2013-12-06 14:11:32

标签: 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。我的默认系统配置使用“,”作为“。”在英语中。所以这不是问题,我只是为了精确而带来它。

1 个答案:

答案 0 :(得分:2)

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

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

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

您可以使用MaskFormatter,只需在需要结果时将其传递给Float.valueOf(str)。另一种方法是实现自己的格式对象,或者监听文本字段和/或其后备文档提供的一些事件,并直接控制用户条目。