欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

Java 中文本组件MQDocument文档:采用正则表达式来判断输入是否合法,,Java 中文本组件MQ

来源: javaer 分享于  点击 8938 次 点评:58

Java 中文本组件MQDocument文档:采用正则表达式来判断输入是否合法,,Java 中文本组件MQ


Java 中文本组件MQDocument文档:采用正则表达式来判断输入是否合法

本MQDocument组件继承了PlainDocument 类,swing中大多数文本组件都可以使用,本组件通过设置limit的值(正则表达式)来判断输入字符是否合法,本方法能更好的解决粘贴文本的问题。同时本组件还可以设置允许输入的字符最大长度,如果只允许输入数字,本组件还可以检查是否超过设置的最大值。

import javax.swing.text.AttributeSet;import javax.swing.text.BadLocationException;import javax.swing.text.PlainDocument;import java.awt.Toolkit;import java.util.regex.Pattern;/** * Java 中文本组件MQDocument文档:采用正则表达式来判断输入是否合法 * * @author 五斗米 <如转载请保留作者和出处> * @blog <a href="http://blog.csdn.net/mq612">http://blog.csdn.net/mq612 */public class MQDocument extends PlainDocument { private static final long serialVersionUID = -4462693078138709956L; 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(); } // 构造方法结束 /**  * 设置字符限制条件  *  * @param limit  *            限制条件 参考正则表达式 java.util.regex.Pattern  */ public void setCharLimit(String limit) {  this.limit = limit; } /**  * 返回字符限制的条件  *  * @return 条件  */ public String getCharLimit() {  return this.limit; } /**  * 清除所有限制字符  */ public void clearLimit() {  this.limit = null; } /**  * 字符输入限制是否包含该字符  *  * @param input  *            字符  * @return true为包含,false为不包含  */ public boolean isOfLimit(CharSequence input) {  if (limit == null) {   return true;  } else {   return Pattern.compile(limit).matcher(input).find();  } } /**  * 字符输入的限制组是否为空  *  * @return true为空,false为有  */ public boolean isEmptyLimit() {  if (limit == null) {   return true;  } else {   return false;  } } /**  * 设置文本框所允许输入的最大字符长度  *  * @param maxLength  *            最大字符长度  */ public void setMaxLength(int maxLength) {  this.maxLength = maxLength; } /**  * 取消文本框最大字符长度的限制  */ public void cancelMaxLength() {  this.maxLength = -1; } /**  * 如果输入的为纯数字,则可用此方法来设置数字的最大值  *  * @param maxValue  *            最大值  */ public void setMaxValue(double maxValue) {  this.isMaxValue = true;  this.maxValue = maxValue; } /**  * 文本框是否限制了数字内容的最大数值  *  * @return true为限制了  */ public boolean isMaxValue() {  return this.isMaxValue; } /**  * 返回限制数字内容最大值  *  * @return double类最大值,如果没有限制会返回0  */ public double getMaxValue() {  return this.maxValue; } /**  * 取消数字内容的最大值设置  */ public void cancelMaxValue() {  this.isMaxValue = false;  this.maxValue = 0; } /**  * 使所有限制设置恢复默认  */ public void reset() {  clearLimit();  cancelMaxLength();  cancelMaxValue(); } /**  * 错误时发声开关  *  * @param beep  *            true为发声音  */ public void errorBeep(boolean beep) {  this.beep = beep; } /**  * 输入错误时是否发声  *  * @return boolean true为发声  */ public boolean isErrorBeep() {  return beep; } 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 (Double.parseDouble(s) > maxValue) {    if (beep) {     toolkit.beep(); // 发出声音    }    return;   }  }  // 如果输入不合法  if(!b){   if (beep) {    toolkit.beep(); // 发出声音   }   return;  }  super.insertString(offs, new String(ch), a); }}//该片段来自于http://byrx.net
相关栏目:

用户点评