使用正则表达式限制swing (JTextField等) 的输入
发布时间:2020-12-14 01:49:06 所属栏目:百科 来源:网络整理
导读:之前使用Qt编写Gui程序的时候,可以直接使用正则表达式限制所有输入框,非常方便。 这段时间要做一份课程设计,使用java编写,ui要限制输入,比如只能输入x位数字,输入身份证等。 百度了许多资料,发现了一个 JFormattedTextField 的类可以规范输入。 刚开
之前使用Qt编写Gui程序的时候,可以直接使用正则表达式限制所有输入框,非常方便。 这段时间要做一份课程设计,使用java编写,ui要限制输入,比如只能输入x位数字,输入身份证等。 百度了许多资料,发现了一个JFormattedTextField的类可以规范输入。 刚开始试用觉得还不错,后来发现一个严重的问题:如果光标不是从最左边插入的话,那么左边的位置就会被空格占满,影响输入。 其实输入框都会提供一个setDocument的方法以规范输入,所以我决定自己写一个类来实现正则表达式。 代码:
import java.util.regex.Matcher; import java.util.regex.Pattern; import javax.swing.text.AttributeSet; import javax.swing.text.BadLocationException; import javax.swing.text.PlainDocument; public class MyRegExp extends PlainDocument { private Pattern pattern; private Matcher m; public MyRegExp(String pat) { super(); this.pattern=Pattern.compile(pat); } @Override public void insertString (int offset,String str,AttributeSet attr) throws BadLocationException { if (str == null){ return; } String tmp=getText(0,offset).concat(str); m=pattern.matcher(tmp); if(m.matches()) super.insertString(offset,str,attr); } } OK,接下来就是调用,方法非常简单,比如我想限制只能输入最多两位小数:
JTextField textFiled=new JTextFiled(); textFiled.setDocument(new MyRegExp("d*(.d{0,2})?")); 这个方法也同时适用于粘贴操作。也可以用于其他拥有setDocument的类,如JPasswordField 但是有一点必须注意,限制输入范围必须从0开始,不能强行限制位数,例如 newMyRegExp("d{2,2}") 是不行的
转载请注明出处:http://www.cnblogs.com/ztzheng/p/3639056.html (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |