我目前正在创建这个java GUI,要求用户输入10个条目,然后使用这些值来执行下一个操作。
我希望只输入数字或小数点,使其只能是浮点值。
如果它不是数字或小数点,它应该提示用户在执行下一个动作之前再次输入该特定条目。
我该怎么做?
答案 0 :(得分:2)
Wong,
不确定您是否使用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(Float.parseFloat(..))。如果这个解析成功,一切都很好。如果解析失败(抛出NumberFormatException),则旧文本将被写回文本字段(字面意思是忽略用户输入)。
我认为您可以直接将KeyAdapter添加到JTextField而无需为其创建专用类,但使用此解决方案,您可以记住初始字符串和旧字符串。
您可以使用代码..如果输入有效,您可以更改文本字段的颜色(或者如果文本与初始字符串相同,则可以在我的代码段中更改)。
另外一条注释:我在一个名为'type'的变量中设置textfield的'type',这只是一个字符串,其值为“int”,“float”等....更好的解决方案例如,这里会是一个枚举...
我希望这有用......
蒂莫
答案 1 :(得分:1)