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