JTextField利用setDocument方式来设置文本框输入的内容

来源:互联网 发布:lofter个性域名怎么弄 编辑:程序博客网 时间:2024/05/22 03:12

JTextField中提供了一个setDocument(Document doc)的方法,利用该方法我们可以设置文本框输入特定的字符。

通常我们继承PlainDocument并重写他的insertString(int offs, String str, AttributeSet a)

offs - 起始偏移量,该值 >= 0

以下文本是对此图像的描述。

str - 要插入的字符串;

a - 插入内容的属性

 

以下是继承该类所实现的两个子类代码:

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;/** * 自己定义的文本 * @author Administrator */public class MyDocument {    /**     * 能输入小数的文本     */    public static class DoubleOnlyDocument extends PlainDocument {        @Override        public void insertString(int offset, String s, AttributeSet attrSet) throws BadLocationException {            //获得文本框中的值            String text = this.getText(0, offset);            String reg = "\\.";            Pattern pat = Pattern.compile(reg);            Matcher mat = pat.matcher(text);                        //判断文本框中是否含有小数点            boolean point = false;            if(mat.find()) {                point = true;            }                        //如果偏移量不为0,并且无小数点时,如果当前输入的为小数点,则添加进文本框并返回,不进行之后的操作            if(offset != 0 && !point) {                if(s.equals(".")) {                    //调用父类方法将字符插入文本框中                    super.insertString(offset, s, attrSet);                    return;                }            }                        //将字符串解析成数字是否会抛出异常,抛出异常则说明该字符不为数字,返回,否则插入文本框中            try {                Integer.parseInt(s);            } catch (NumberFormatException ex) {                return;            }            super.insertString(offset, s, attrSet);        }    }    /**     * 只能输入数字     */    public static class NumOnlyDocument extends PlainDocument {        @Override        public void insertString(int offset, String s, AttributeSet attrSet) throws BadLocationException {            try {                Integer.parseInt(s);            } catch (NumberFormatException ex) {                return;            }            super.insertString(offset, s, attrSet);        }    }    }


接下来通过setDoucument(new MyDocument.DoubleOnlyDocument())来控制文本框中输入的字符了。

需要注意的是:

1、如果有多个文本框时,每一个JTextField都需要设置一个自己的Document,否则某一个文本框输入值时,其他文本框的值也会改变

2、如果先设置文本框的值,再设置Document,则文本框中的值将变为空。

如:

  jTextField.setText("1111");  JTextField.setDoucument(new MyDocument.NumOnlyDocument());//此时jTextField文本框中显示出来的值就为空

原创粉丝点击