使用正则表达式限制swing (JTextField等) 的输入
来源:互联网 发布:sat知乎 编辑:程序博客网 时间:2024/06/10 03:46
之前使用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开始,不能强行限制位数,例如 new MyRegExp("\\d{2,2}") 是不行的
转载请注明出处:http://www.cnblogs.com/ztzheng/p/3639056.html
0 0
- 使用正则表达式限制swing (JTextField等) 的输入
- 使用正则表达式限制输入
- 限制swing中的JTextField只能输入中文,字母,数字。
- JAVA基础:SWING中JTextField限制只能输入数字
- Swing中JTextField的输入/删除事件
- 限制JTextField的输入个数和格式
- JTextField限制输入数字的方法
- 使用正则表达式限制文本框输入格式
- Java限制JTextField输入
- 使用正则表达式限制文本框只能输入数字、小数点、英文字母、汉字等
- 正则表达式限制input的输入值
- 正则表达式限制输入字符,数字,汉字等
- replace限制文本框只能输入数字,数字和字母等的正则表达式
- replace限制文本框只能输入数字,数字和字母等的正则表达式
- replace限制文本框只能输入数字,数字和字母等的正则表达式
- replace限制文本框只能输入数字,数字和字母等的正则表达式
- replace限制文本框只能输入数字,数字和字母等的正则表达式
- replace限制文本框只能输入数字,数字和字母等的正则表达式
- php面向对象之抽象类
- Android LocalBroadcastManager
- Ubuntu 下的截图命令
- POJ-3734-Blocks
- Hibernate中get与load的用法
- 使用正则表达式限制swing (JTextField等) 的输入
- sql的聚合函数
- [css]css.map结尾的文件是用来做什么的?
- 魔术师的秘密
- 外链的部门与质量至关关紧的反映
- 转帖 三星的面试,大家看看结果有戏没? [问题点数:88分]
- 应用Apache Axis2 实现Webservice发布
- SmartPointer
- 转载--我的求职路:华为、中兴、百度、腾讯