繁体   English   中英

如何限制用户仅输入数字?

[英]How to limit user to input only numbers?

我当前正在创建此Java GUI,将要求用户输入10个条目,然后使用这些值执行下一步操作。

我只希望在其中输入数字或小数点,使其只能是浮点值。

如果不是数字或小数点,则应提示用户在执行下一个操作之前再次输入该特定条目。

我该怎么办?

不知道您是否正在使用Swing ...

几年前,我遇到了同样的问题,我通过创建一个扩展了JTextField的RestrictedTextField类解决了它。 在构造函数中,我添加了一个键侦听器(addKeyListener(new RestrictedKeyAdapter());)

private class RestrictedKeyAdapter extends KeyAdapter {

    @Override
    public void keyReleased(KeyEvent e) {

        if (getText().equals("")) {
            oldString = "";
            return;
        } else {
            // if you cannot parse the string as an int, or float, 
            // then change the text to the text before (means: ignore
            // the user input)
            try {
                if (type.equals("int")) {
                    int i = Integer.parseInt(getText());
                    oldString = getText();
                } else if (type.equals("float")) {
                    float f = Float.parseFloat(getText());
                    oldString = getText();
                } else {
                    // do nothing
                }
            } catch (NumberFormatException el) {
                setText(oldString);
            }

            // if the text is identical to the initial text of this
            // textfield paint it yellow. If the text was changed
            // paint it red.
            if (initialString.equals(getText())) {
                setForeground(Color.YELLOW);
            } else {
                setForeground(Color.RED);
            }
        }
    }
}

这个想法是,每次用户在文本字段中按下一个键(然后释放它)时,都会分析该文本字段中的文本。 例如,如果组件只接受浮点数,则组件将尝试将其解析为浮点数(Float.parseFloat(..))。 如果此解析成功,则一切正常。 如果解析失败(引发NumberFormatException),则旧文本将写回到文本字段中(实际上忽略用户输入)。

我认为您可以将KeyAdapter直接添加到JTextField,而无需为此创建专用的类,但是使用此解决方案,您可以记住初始字符串和旧字符串。

您可以尝试使用代码。.如果输入有效或无效,则可以更改文本字段的颜色(或者,如果文本与初始字符串相同,则可以更改代码段的颜色)。

另一条评论:我将文本字段的“类型”设置为名称为“ type”的变量,该变量只是一个字符串,其值为“ int”,“ float”等。例如一个枚举

我希望这是有帮助的...

提摩

您想做什么有很多选择。 您可以在此处查看这样做的一个示例。 另一个例子是使用格式化的TextField,如图所示这里

另一方面,提交后,您可以尝试将值解析为floatdouble 如果有任何异常,则该值不是数字。

最后,您可以使用正则表达式。 诸如^\\\\d+(\\\\.\\\\d+)?$类的表达式应匹配任何整数或浮点数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM