//用来限制JTextField里输入的只能为数字和最多一个小数点并且限制给定输入长度的类:
private static class NumberLenghtLimitedDmt extends PlainDocument {
private int limit; //输入最大长度
private boolean dot = false;// 表示有无小数点
public NumberLenghtLimitedDmt(int limit) {
super();
this.limit = limit;
}
public void insertString //重载insertString方法
(int offset, String str, AttributeSet attr) throws BadLocationException {
if (str == null){
return;
}
if ((getLength() + str.length()) <= limit) {
char[] upper = str.toCharArray();
int length=0;
for (int i = 0; i < upper.length; i++) {
if (upper[i]>='0'&&upper[i]<='9' || upper[i]=='.'&&dot==false){ //为数字或为第一个小数点
upper[length++] = upper[i];
}
if(upper[i]=='.'){ //出现小数点则dot置true
dot=true;
}
}
super.insertString(offset, new String(upper,0,length), attr); //调用父类的insertString
}
}
} private static JTextField t1 = new JTextField(8);
然后在main方法里建立了界面后有:
t1.setDocument(new NumberLenghtLimitedDmt(12)); 运行后,在t1这个JTextField里只能输入数字和最多一个小数点。但是一旦退格将那个小数点删除后就不能再输入小数点了,求高手解释下原因。如果要按照我需要的限制(只能输入数字和最多一个小数点,输入长度限制)该怎么设计?
private static class NumberLenghtLimitedDmt extends PlainDocument {
private int limit; //输入最大长度
private boolean dot = false;// 表示有无小数点
public NumberLenghtLimitedDmt(int limit) {
super();
this.limit = limit;
}
public void insertString //重载insertString方法
(int offset, String str, AttributeSet attr) throws BadLocationException {
if (str == null){
return;
}
if ((getLength() + str.length()) <= limit) {
char[] upper = str.toCharArray();
int length=0;
for (int i = 0; i < upper.length; i++) {
if (upper[i]>='0'&&upper[i]<='9' || upper[i]=='.'&&dot==false){ //为数字或为第一个小数点
upper[length++] = upper[i];
}
if(upper[i]=='.'){ //出现小数点则dot置true
dot=true;
}
}
super.insertString(offset, new String(upper,0,length), attr); //调用父类的insertString
}
}
} private static JTextField t1 = new JTextField(8);
然后在main方法里建立了界面后有:
t1.setDocument(new NumberLenghtLimitedDmt(12)); 运行后,在t1这个JTextField里只能输入数字和最多一个小数点。但是一旦退格将那个小数点删除后就不能再输入小数点了,求高手解释下原因。如果要按照我需要的限制(只能输入数字和最多一个小数点,输入长度限制)该怎么设计?
将JTextField中的字符串转化为数字,如double,如果成功转化,说明输入的是数字,没问题,就让这个字符串继续存在否则,一旦在转化为字符串的过程中出现异常,如InputMismatchException异常,
就将JTextField中的内容设为空(""),并弹出消息框,告诉用户输入的内容不合法
限制给定输入长度的类:
查一下API文档,看看有没有限制长度的,很可能有如果没有,就用判断字符串的长度的方法来限制输入长度
仅供参考
dot=false;
super.insertString(offset, new String(upper,0,length), attr); //调用父类的insertString
退格键删除了小数点,你的pg却没有reset标志位。
我觉得你完全没必要想那么复杂,每次keyDown都去做整体check就OK了。如果已经存在小数点了,则不响应小数点的输入。也别跳出对话框,那样会让人很烦。
这是他的构造函数,后面那个参数应该就是限定他的长度了
放到本体方法insertString结束之前呢