之前使用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

使用正则表达式限制swing (JTextField等) 的输入的更多相关文章

  1. C# 使用js正则表达式,让文本框只能输入数字和字母,最大长度5位

    使用js正则表达式,让文本框只能输入数字和字母,最大长度5位,只需要加个onkeyup事件,即可简单实现 <asp:TextBox ID="txtBegin" runat=& ...

  2. Vue input 控件: 通过自定义指令(directive)使用正则表达式限制input控件的输入

    前言: 网站中的input输入框使用非常广泛,因业务场景不同需要对输入框做合法性校验或限制输入,比如电话号码.邮件.区号.身份证号等.input框的不合法内容主要有两种方式处理:1.用户输入内容后,通 ...

  3. 使用正则表达式限制<kbd>QLineEdit</kbd>不能输入大于某个整数

    使用正则表达式限制QLineEdit不能输入大于某个整数,即:使用正则表达式,匹配不大于某个整数 举例:匹配不大于4567 * 原理分析: 匹配不大于4567这个数,所以第一个想到的是只要小于4567 ...

  4. 在js中正则表达式验证小时分钟,将输入的字符串转换为对应的小时和分钟

    文章目录 1.预备知识 2.在js中的代码片段 3.测试结果 1.预备知识 splict()方法 Date()的相关方法 setHours()的用法 2.在js中的代码片段 //验证小时和分钟 var ...

  5. Java Swing界面编程(18)---单行文本输入组件:JTextField

    版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/xuejiawei123/article/details/27565407 下面的程序与上一例有一点差 ...

  6. 人品计算器 JFrame 窗体软件版 JPanel JTextField JTextArea JButtton JLabel setContentPane Swing包(用户界面工具包)

    import java.awt.BorderLayout; import java.awt.Color; import java.awt.GridLayout; import java.awt.eve ...

  7. 编写图形界面下的Java Swing程序,接受用户输入的两个数据为上下限,然后输出上、下限之间的所有素数。(结果部分每行显示10个数据)

    这个代码我整体写的比较简单,读者可以简单参考一下,对人家题目要求略微修改了一下,多加了一个“置空”按钮.下图为我设计的界面 运行程序后的截图请看我后面的截图: package com.wangshil ...

  8. Qt中限制IP输入的正则表达式:

    这个例子中,是使用QLineEdit加入正则表达式来实现ip地址的输入功能的,不符合规范的数据将不能输入: QRegExp regExpIP("((25[0-5]|2[0-4][0-9]|1 ...

  9. Java正则表达式基础知识及实例说明

    众所周知,在程序开发中,难免会遇到需要匹配.查找.替换.判断字符串的情况发生,而这些情况有时又比较复杂,如果用纯编码方式解决,往往会浪费程序员的时间及精力.因此,学习及使用正则表达式,便成了解决这一矛 ...

随机推荐

  1. 交叉编译安装ARM平台上的Qt

    一.宿主机环境搭建: 编译需要x11库的支持,在Ubuntu下安装命令: sudo apt-get install libx11-dev libxext-dev libxtst-dev 二.下载源码包 ...

  2. static说明

    1.最基本用法:加static的全局变量或者函数,只能在本文件中使用.可见性只在本文件中. 当我们同时编译多个文件时,所有未加static前缀的全局变量和函数都具有全局可见性.为理解这句话,我举例来说 ...

  3. 距离顶部估计像素,显示div!

    <html> <head> <title>slide</title> <style type="text/css"> # ...

  4. 唯品会安卓版app分析

    .................................................................................................... ...

  5. Java面试题之十

    五十六.java中有几种类型的流?JDK 为每种类型的流提供了一些抽象类以供继承,请说出他们分别是哪些类? 主要有字节流,字符流.字节流继承于InputStream .OutputStream,字符流 ...

  6. mybatis和ibatis区别

     ibatis本是apache的一个开源项目,2010年这个项目由apache software foundation 迁移到了google code,并且改名为mybatis.  1.Mybat ...

  7. linux mysql密码破解一张图解释

  8. Python与MySQL首次交互

    前两天在工作之余研究了一下Python,对基础有了大致了解,就想拿她很MqSQL交互一下. 一开始就遇到了问题,要import MySQLdb,search发现有人说安装mysql-python,于是 ...

  9. python字符集选择

    # coding=utf8 或者 # -*- coding:utf-8 -*- 在python2 中默认是ASCII码的字符集,但可以引入其他的字符集  这个需要在头信息中引入: 而在python3中 ...

  10. 将string 转int

    /** * @param {string} str * @return {number} */ var myAtoi = function(str) { str = str.replace(/^(\s ...