Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何限制用户只输入数字?_Java_User Interface_Numbers - Fatal编程技术网

Java 如何限制用户只输入数字?

Java 如何限制用户只输入数字?,java,user-interface,numbers,Java,User Interface,Numbers,我目前正在创建这个JavaGUI,它将要求用户输入10个条目,然后使用这些值执行下一个操作 我只想在里面输入数字或小数点,这样它只能是一个浮点值 如果不是数字或小数点,则在执行下一个操作之前,应提示用户再次输入该特定条目 我该怎么做呢?对于您想做的事情,有多种选择。您可以查看这样做的一个示例。另一个例子是使用格式化的文本字段,如图所示 另一方面,在提交时,您可以尝试将值解析为浮点或双精度。如果得到任何异常,则该值不是数字 最后,可以使用正则表达式。诸如^\\d+(\\.\\d+)?$之类的表达式

我目前正在创建这个JavaGUI,它将要求用户输入10个条目,然后使用这些值执行下一个操作

我只想在里面输入数字或小数点,这样它只能是一个浮点值

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


我该怎么做呢?

对于您想做的事情,有多种选择。您可以查看这样做的一个示例。另一个例子是使用格式化的文本字段,如图所示

另一方面,在提交时,您可以尝试将值解析为
浮点
双精度
。如果得到任何异常,则该值不是数字


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

对于您想做的事情,有多种选择。您可以查看这样做的一个示例。另一个例子是使用格式化的文本字段,如图所示

另一方面,在提交时,您可以尝试将值解析为
浮点
双精度
。如果得到任何异常,则该值不是数字

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

不确定您是否正在使用Swing

很久以前我也遇到过同样的问题,我通过创建一个类RestrictedTextField扩展JTextField解决了这个问题。在构造函数中,我添加了一个密钥侦听器(addKeyListener(new RestrictedKeyAdapter());)

其思想是,每当用户按下文本字段中的一个键(然后释放),文本字段中的文本就会被解析。例如,如果组件应该只接受浮点数,那么组件将尝试将其解析为浮点数(float.parseFloat(..)。如果此解析成功,则一切正常。如果解析失败(抛出NumberFormatException),则旧文本将写回textfield(字面上忽略用户输入)

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

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

另一个注释:我在一个名为“type”的变量中设置了textfield的“type”,它只是一个值为“int”、“float”等的字符串。。。。一个更好的解决方案是在这里例如一个枚举当然

我希望这是有帮助的

蒂莫王

不确定您是否正在使用Swing

很久以前我也遇到过同样的问题,我通过创建一个类RestrictedTextField扩展JTextField解决了这个问题。在构造函数中,我添加了一个密钥侦听器(addKeyListener(new RestrictedKeyAdapter());)

其思想是,每当用户按下文本字段中的一个键(然后释放),文本字段中的文本就会被解析。例如,如果组件应该只接受浮点数,那么组件将尝试将其解析为浮点数(float.parseFloat(..)。如果此解析成功,则一切正常。如果解析失败(抛出NumberFormatException),则旧文本将写回textfield(字面上忽略用户输入)

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

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

另一个注释:我在一个名为“type”的变量中设置了textfield的“type”,它只是一个值为“int”、“float”等的字符串。。。。一个更好的解决方案是在这里例如一个枚举当然

我希望这是有帮助的


timo

您使用的是swing还是applet?您使用的是swing还是applet?永远不要使用keyListeners,尤其是在输入验证Ctrl+V或特殊操作系统功能中。永远不要使用keyListeners,尤其是在输入验证Ctrl+V或特殊操作系统功能中。
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);
            }
        }
    }
}