JTextField正则表达式

来源:互联网 发布:python keras实例 编辑:程序博客网 时间:2024/06/05 10:12
package com.os.util;import java.awt.Toolkit;import java.util.regex.Pattern;import javax.swing.JFrame;import javax.swing.JPanel;import javax.swing.JTextField;import javax.swing.text.AttributeSet;import javax.swing.text.BadLocationException;import javax.swing.text.PlainDocument;public class MQDocument extends PlainDocument {private String limit = null; // 输入字符限制的正则表达式private int maxLength = -1; // 输入字符最大长度的限制,-1为不限制private double maxValue = 0; // 如果输入的是数字,则最大值限制private boolean isMaxValue = false; // 是否采用了最大值限制private Toolkit toolkit = null; // 用来在错误的时候发出系统声音private boolean beep = false; // 是否发声,true为发出声音// 构造方法public MQDocument() {super();this.init();}public MQDocument(Content c) {super(c);this.init();}private void init() {toolkit = Toolkit.getDefaultToolkit();}// 构造方法结束public void setCharLimit(String limit) {this.limit = limit;}public String getCharLimit() {return this.limit;}public void clearLimit() {this.limit = null;}public boolean isOfLimit(CharSequence input) {if (limit == null) {return true;} else {return Pattern.compile(limit).matcher(input).find();}}public boolean isEmptyLimit() {if (limit == null) {return true;} else {return false;}}public void setMaxLength(int maxLength) {this.maxLength = maxLength;}public void cancelMaxLength() {this.maxLength = -1;}public void setMaxValue(double maxValue) {this.isMaxValue = true;this.maxValue = maxValue;}public boolean isMaxValue() {return this.isMaxValue;}public double getMaxValue() {return this.maxValue;}public void cancelMaxValue() {this.isMaxValue = false;this.maxValue = 0;}public void reset() {clearLimit();cancelMaxLength();cancelMaxValue();}public void errorBeep(boolean beep) {this.beep = beep;}public boolean isErrorBeep() {return beep;}/*此方法会在JTextComponent调用setText();方法时自动调用*/public void insertString(int offs, String str, AttributeSet a)throws BadLocationException, NumberFormatException {// 若字符串为空,直接返回。if (str == null) {return;}boolean b = true;char[] ch = str.toCharArray();for (int i = 0; i < ch.length; i++) {String temp = String.valueOf(ch[i]);// 如果要输入的字符不在允许范围内if (!isOfLimit(temp)) {b = false;}// 如果有字符长度限制,并且现在的字符长度已经大于或等于限制if (maxLength > -1 && this.getLength() >= maxLength) {b = false;}}// 如果内容设置了最大数字if (isMaxValue) {String s = this.getText(0, this.getLength()); // 文档中已有的字符s = s.substring(0, offs) + str + s.substring(offs, s.length());if (s.matches("^\\d*$") && Double.parseDouble(s) > maxValue) {if (beep) {toolkit.beep(); // 发出声音}return;}}// 如果输入不合法if (!b) {if (beep) {toolkit.beep(); // 发出声音}return;}super.insertString(offs, new String(ch), a);}}class Test extends JFrame {private static final long serialVersionUID = -2397593626990759111L;private JPanel pane = null;private JTextField text = null;private MQDocument doc = null;public Test() {super("Test");pane = new JPanel();text = new JTextField(25);doc = new MQDocument();text.setDocument(doc);pane.add(text);doc.errorBeep(true); // 输入不合法时发出提示音doc.setMaxLength(9); // 输入长度不能超过9个字符// doc.setCharLimit("[a-zA-Z]"); // 只允许输入大小写英文字母doc.setCharLimit("[0-9]"); // 只允许输入数字// doc.setCharLimit("[\u4e00-\u9fa5]"); // 只允许输入中文this.getContentPane().add(pane);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);this.setSize(400, 180);this.setVisible(true);}public static void main(String args[]) {new Test();}}

0 0
原创粉丝点击