Java 版 (精华区)
发信人: DreamWeaver (猪头小队长), 信区: Java
标 题: 代码示例:在JTextField中限制用户输入
发信站: 哈工大紫丁香 (2003年03月25日14:57:25 星期二), 转信
http://www.cn-java.com/forum/show_topic.php?forum_id=4&topic_id=8815
写数据库应用时很有用的。如果要其它的限制,仿照下面的代码自己写吧。
package com.zhongxing.client.atm;
import javax.swing.text.*;
/**
* <p>Title: </p>
* <p>Description: 多风格文本文档,用途:作为JTextField的数据模型。风格包括:
* 长度限制、只允许数字、只允许数字时是否允许负值符号、是否允许引号字符(单引
* 号和双引号)。这里的长度指字节长度,如果长度限制为 0 ,则表示没有长度限制。
*
* 使用例子:
* JTextField textField1 = new JTextField(
* new ZXB10Document(ZXB10Document.LENGTH_LIMIT, 5), "", 5);
* 为textField1设置 长度限制为5个字节的风格。
*
* 或:
* textField1.setDocument(
* new ZXB10Document(ZXB10Document.LENGTH_LIMIT | ZXB10Document.DIGITAL, 10));
* 为textField1设置为 只允许输入数字,不允许是负值,长度限制为10个字节的风格。
*
* 注意:允许输入的数字是英文输入法下输入的ASCII字符,一个数字字符占一个字节。
* 如果在中文输入法下输入的数字,系统将不认为是数字,并且一个字符占两个字节。
*
* </p>
* <p>Copyright: Copyright (c) 2002</p>
* <p>Company: 中兴通讯</p>
* @author throw_exception
* @version 1.0
*/
public class ZXB10Document extends PlainDocument {
/**
* 普通风格。
*/
public final static int PLAIN = 0x00;
/**
* 长度限制风格。
*/
public final static int LENGTH_LIMIT = 0x01;
/**
* 只允许数字风格,默认是非负的。
*/
public final static int DIGITAL = 0x02;
/**
* 允许为负值。只有文档已经被设置了 DIGITAL 风格时有效。
*/
public final static int ALLOW_NEGATIVE = 0x04;
/**
* 是否允许引号。当文档被设置为 DIGITAL 风格时,本风格无效。
*/
public final static int QUOTE_FILTED = 0x08;
protected int style = PLAIN;
protected int limit = 0;
/**
* 创建普通风格,没有长度限制的文档。
*/
public ZXB10Document() {
this(PLAIN, 0);
}
/**
* 创建指定风格的文档,没有长度限制。
* @param style 指定的风格,可以是各种风格的组合。
*/
public ZXB10Document(int style) {
this(style, 0);
}
/**
* 创建指定风格的文档,有长度限制。
* @param style 指定的风格,可以是各种风格的组合。
* @param lengthLimit 指定的长度,大于或等于0。等于 0 时表示无长度限制。
*/
public ZXB10Document(int style, int lengthLimit) {
setLengthLimit(lengthLimit);
this.style = style;
}
/**
* 设置指定的风格。
* @param style 指定的风格,将替换原来的风格。
*/
public void setStyle(int style) {
this.style = style;
}
/**
* 增加指定的风格。
* @param style 指定的风格,将添加到原来的风格之上。
*/
public void addStyle(int style) {
this.style = this.style | style;
}
/**
* 删除指定的风格。
* @param style 指定的风格,从原来的风格上删除这种风格。
*/
public void removeStyle(int style) {
this.style = this.style & (~style);
}
/**
* 设置长度限制。
* @param lengthLimit 长度限制,大于或等于 0。等于 0 时表示没有长度限制。
*/
public void setLengthLimit(int lengthLimit) {
if(lengthLimit < 0) throw new RuntimeException("Negative length-limit!");
this.limit = lengthLimit;
}
/**
* 有字符串插入文档内容时触发这个方法。覆盖父类的相应方法。
* @param offs
* @param str
* @param a
* @throws BadLocationException
*/
public void insertString(int offs, String str, AttributeSet a)
throws BadLocationException{
if(str == null) return;
String oldStr = getText(0, getLength());
// 有长度限制,如果不满足条件,则返回。
if(((style & LENGTH_LIMIT) != 0) && !isLengthPassed(oldStr.
getBytes().length + str.getBytes().length)) {
return;
}
// 只允许数字
if((style & DIGITAL) != 0) {
if(isDigitalPassed(oldStr,offs,str,(style & ALLOW_NEGATIVE) != 0)) {
;
}else{
return; // 不满足条件
}
}else if((style & QUOTE_FILTED) != 0) { // 不允许引号
if(containQuotes(str)) {
return;
}
}
super.insertString(offs, str, a);
}
/**
* 判断长度限制条件是否满足
* @param length 总长度
* @return 是否满足
*/
private boolean isLengthPassed(int length) {
return ((limit == 0) || (length <= limit));
}
/**
* 判断是否全是数字。
* @param oldStr
* @param offs
* @param str
* @param allowNegative 是否允许负值
* @return 是否满足
*/
private boolean isDigitalPassed(String oldStr, int offs, String str,
boolean allowNegative) {
if(allowNegative) {
String newStr = oldStr.substring(0, offs) + str + oldStr.
substring(offs);
return (newStr.equals("-") || (newStr.startsWith("-") &&
allDigital(newStr.substring(1))));
}else{
return allDigital(str);
}
}
/**
* 判断是否全是数字。
* @param str
* @return 是否全是数字
*/
private boolean allDigital(String str) {
char[] chars = str.toCharArray();
for(int i = 0, len = chars.length; i < len; i ++) {
if(chars[i] < '0' || chars[i] > '9') {
return false;
}
}
return true;
}
/**
* 判断指定的字符串中是否包含引号。
* @param str 需要判断的字符串
* @return 是否包含引号
*/
private boolean containQuotes(String str) {
char[] chars = str.toCharArray();
for(int i = 0, len = chars.length; i < len; i ++) {
if(chars[i] == '\'' || chars[i] == '\"') {
return true;
}
}
return false;
}
}
--
幸亏我拼命的护住了脸!
我猪一样的相貌才得以保全!!!
※ 来源:·哈工大紫丁香 bbs.hit.edu.cn·[FROM: 211.93.58.23]
※ 修改:·DreamWeaver 於 03月26日09:33:03 修改本文·[FROM: 202.118.239.4]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:210.186毫秒