[英]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”等。例如一个枚举
我希望这是有帮助的...
提摩
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.