我必须验证一个java text field
,它只接受最大长度为10的整数值。必须跳过其他值的输入。
我试过这个如下。在那种情况下,我无法输入句号。
private void jTextField2KeyTyped(java.awt.event.KeyEvent evt) {
char c = evt.getKeyChar();
if(!(Character.isDigit(c) || (c==KeyEvent.VK_BACK_SPACE)||(c==KeyEvent.VK_STOP ) )){
getToolkit().beep();
evt.consume();
}
}
答案 0 :(得分:3)
使用JFormattedText字段而不是JTextField,然后您可以指定一个掩码来限制可以输入的内容(或者使用数字格式化程序将其自动解析为数字)。
http://docs.oracle.com/javase/tutorial/uiswing/components/formattedtextfield.html
答案 1 :(得分:3)
为此,您可以使用DocumentFilter
,例如下一个:
JTextField f = new JTextField(10);
((AbstractDocument)f.getDocument()).setDocumentFilter(new DocumentFilter(){
Pattern pattern = Pattern.compile("\\d*");
@Override
public void replace(FilterBypass arg0, int arg1, int arg2, String arg3, AttributeSet arg4) throws BadLocationException {
String text = arg0.getDocument().getText(0, arg0.getDocument().getLength())+arg3;
Matcher matcher = pattern.matcher(text);
if(!matcher.matches()){
return;
}
if(text.length()>10){
return;
}
super.replace(arg0, arg1, arg2, arg3, arg4);
}
});