确定JTextField是否包含整数

时间:2014-03-11 11:15:30

标签: java swing validation integer jtextfield

我猜猜游戏。 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());
    }
}

3 个答案:

答案 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
}