我猜猜游戏。 JTextField不能为空,不能长于或小于5且不能包含数字。我该怎么做最后一部分?
@Override
public void actionPerformed(ActionEvent e) {
if (text.getText().isEmpty()) {
showErrorMessage("You have to type something");
} else if (text.getText().length() != 5) {
showErrorMessage("Currently only supporting 5-letter words");
} else if (contains integer){
showErrorMessage("Words don't contain numbers!");
} else {
r.setGuess(text.getText());
}
}
答案 0 :(得分:8)
我建议将 允许的白名单列入白名单,而不是明确检查数字。例如,允许带有重音的字母吗?大小写?标点?
一旦你完成了你的要求,我建议你将它们表达为regular expression - 然后检查文本是否与正则表达式匹配。
例如:
private static final Pattern VALID_WORD = Pattern.compile("^[A-Za-z]*$");
...
if (!VALID_WORD.matcher(text.getText()).matches()) {
// Show some appropriate error message
}
请注意,我没有在那里包含长度检查,因为您已经覆盖了这些 - 并且为了提供更具体的错误消息,这样做可能是值得的。
您可能还需要考虑阻止文本框接受无效字符开头 - 只需拒绝按键,而不是等待提交事件。 (例如,您也可以同时更改案例。)如评论中所述,JFormattedTextField
可能是一个很好的匹配 - 请参阅tutorial开始。
答案 1 :(得分:1)
创建一个方法,检查JTextField
是否有这样的数字:
private boolean isContainInt(JTextField field) {
Pattern pt = Pattern.compile("\\d+");
Matcher mt = pt.matcher(field.getText());
return mt.find();
}
答案 2 :(得分:-1)
if (!text.getText().matches("[a-zA-Z]*")) {
// something wrong
}