是否可以将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。我的默认系统配置使用“,”作为“。”在英语中。所以这不是问题,我只是为了精确而带来它。
答案 0 :(得分:2)
你在这里遇到了JFormattedTextField的一些限制。
如果您使用DecimalFormat http://docs.oracle.com/javase/7/docs/api/java/text/DecimalFormat.html,您可以将显示设置为您喜欢的外观,但不会严格执行用户键入的内容。返回的结果将是一个数字。
如果您使用MaskFormatter,那么您将获得严格的强制执行,但返回的值是一个字符串。
您可以使用MaskFormatter,只需在需要结果时将其传递给Float.valueOf(str)。另一种方法是实现自己的格式对象,或者监听文本字段和/或其后备文档提供的一些事件,并直接控制用户条目。