Java 中文本组件MQDocument文档:采用正则表达式来判断输入是否合法,,Java 中文本组件MQ
分享于 点击 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
用户点评