我为JFormattedTextField创建的NumberFormatter函数,不允许输入十进制数

时间:2017-05-16 20:05:10

标签: java decimalformat jformattedtextfield numberformatter

为了将用户的输入限制在特定的数值范围,我创建了这个功能:

public static final Locale GR=new Locale("el", "GR");

public static NumberFormatter getMyNumberFormatter(){
    NumberFormatter formatter = new NumberFormatter(NumberFormat.getInstance(GR));
    formatter.setValueClass(Double.class);
    formatter.setAllowsInvalid(false);
    formatter.setCommitsOnValidEdit(true);
    formatter.setMinimum(0.0);
    formatter.setMaximum(10000000.0);
    DecimalFormat df = (DecimalFormat)DecimalFormat.getInstance(GR);
    df.setGroupingUsed(true);
    formatter.setFormat(df);
    return formatter;
}

我将此格式化程序应用于 JFormatedTextfield ,但它在整数值上仅 。我希望用户能够键入从0.0到10000000.0的浮点数值,但当前格式化程序只允许整数。自动分组工作完美。有什么建议吗?

1 个答案:

答案 0 :(得分:4)

我记得JFormattedTextField使用起来很痛苦。

我假设DecimalFormat不允许只有小数点的数字,基于javadoc的以下部分:

  

如果要允许用户输入小数值,则应强制DecimalFormat至少包含一个小数(#。0 ###),或允许该值无效setAllowsInvalid(true)。否则用户可能无法输入小数值。

您也可以尝试添加

df.setDecimalSeparatorAlwaysShown(true);

一个注意事项:使用一个NumberFormat创建JFTF并稍后设置一个新的JFTF有点令人困惑。更直接(未经测试):

DecimalFormat df = (DecimalFormat)DecimalFormat.getInstance(GR);
df.setGroupingUsed(true);
df.setDecimalSeparatorAlwaysShown(true);
NumberFormatter formatter = new NumberFormatter(df);
...

或只是

NumberFormatter formatter = new NumberFormatter();
...
formatter.setFormat(df);

建议(比使用JFTF更好的IMO):

扩展DocumentFilter并将其设置为新PlainDocument的过滤器。使用使用该文档的JTextField。