文本框是Java GUI程序中比較常用的組件之一,有時需要限制用戶輸入的字符類型。本文將介紹如何設置文本框只能輸入數字和字母。
public class JTextFieldNumberLetter extends JTextField {
private static final long serialVersionUID = 1L;
public JTextFieldNumberLetter(int column) {
super(column);
}
public JTextFieldNumberLetter() {
super();
}
@Override
public void setDocument(Document document){
if(document instanceof NumberLetterDocument){
super.setDocument(document);
} else {
throw new IllegalArgumentException(
"Only NumberLetterDocument objects are allowed");
}
}
}
上述代碼中,我們自定義了一個JTextFieldNumberLetter類繼承了JTextField,并重寫setDocument方法。我們將自己定義的NumberLetterDocument傳入setDocument方法中,這樣就限制了文本框中只能輸入數字和字母。
public class NumberLetterDocument extends PlainDocument {
private static final long serialVersionUID = 1L;
@Override
public void insertString(int offs, String str, AttributeSet a)
throws BadLocationException {
if (str == null) {
return;
}
char[] input = str.toCharArray();
boolean isNumberLetter = true;
for (int i = 0; i < input.length; i++) {
if (!Character.isDigit(input[i]) && !Character.isLetter(input[i])) {
isNumberLetter = false;
break;
}
}
if (isNumberLetter) {
super.insertString(offs, new String(input), a);
}
}
}
上述代碼為NumberLetterDocument類的實現,我們通過重寫insertString方法,檢查輸入的字符是否為數字或字母,如果全都是,則調用父類的insertString方法進行插入,否則不響應輸入。
我們將設置好的JTextFieldNumberLetter類應用到我們的程序中,就可以實現文本框只能輸入數字和字母的效果了。