JAVA环境下:
JTextField textfield = new JTextField();
textfield.setDocument(new NumberLimitedDocument());
//判断输入的是否是数字,是则成功插入,否则无效,可以添加字数限制
public class NumberLimitedDocument extends PlainDocument{
private int limit = 1000000;
public NumberLimitedDocument(){
}
public NumberLimitedDocument(int limit){
super();
this.limit = limit;
}
@Override
public void insertString(int offs, String str, AttributeSet a) throws BadLocationException {
// TODO Auto-generated method stub
// System.out.println(getLength() +" "+str.length());
if(str == null) return;
//getLength()获得已经输入的字符串长度,str.length()表示当前输入的字符串长度
if((getLength() + str.length()) <= limit){
char[] temps = str.toCharArray();
int length = 0;
for (int i = 0; i < temps.length; i++) {
if(temps[i] >= '0' && temps[i] <= '9'){
temps[length++] = temps[i];
}
}
super.insertString(offs, new String(temps,0,length), a);
}
}
}
OS X环境下:
让处理类成为NSTextFieldDelegate代理,并实现以下方法:
//监听输入框的输入
-(void)controlTextDidChange:(NSNotification *)obj{
NSTextField *textfield = [obj object];
NSString *strInput = textfield.stringValue;
NSInteger inputLength = strInput.length;
if (inputLength > 0){
//判断字符串长度,当长度大于限制长度时,忽略后面的字符串
if (inputLength > TEXTFIELD_MAX_LENGTH) {
textfield.stringValue = [textfield.stringValue substringToIndex:TEXTFIELD_MAX_LENGTH];
return;
}
//检测输入的字符是否是数字,不是则删除
NSMutableString *strTemp = [[NSMutableString alloc] initWithCapacity:16];
for (int i = 0; i < inputLength; i++) {
char temp = [strInput characterAtIndex:i];
if(temp >= '0' && temp <= '9'){
[strTemp appendString:[NSString stringWithFormat:@"%c",temp]];
}
}
textfield.stringValue = [NSString stringWithString:strTemp];
}
}