Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Can';我想不出是什么';我的文档过滤器有问题吗_Java_Regex_Swing_User Interface_Documentfilter - Fatal编程技术网

Java Can';我想不出是什么';我的文档过滤器有问题吗

Java Can';我想不出是什么';我的文档过滤器有问题吗,java,regex,swing,user-interface,documentfilter,Java,Regex,Swing,User Interface,Documentfilter,我试着将其他人制作的定制的普通文档整合到一个我需要的文档中,但由于我不知道普通文档的机制,我失败了,它也不起作用。我需要的东西,将确保我的textfield只允许2个字母,所以任何一个a-zA-Z出现只有两次。我先试了一下: public class LetterDocument extends PlainDocument { private String text = ""; @Override public void insertString(int of

我试着将其他人制作的定制的普通文档整合到一个我需要的文档中,但由于我不知道普通文档的机制,我失败了,它也不起作用。我需要的东西,将确保我的textfield只允许2个字母,所以任何一个a-zA-Z出现只有两次。我先试了一下:

    public class LetterDocument extends PlainDocument {

    private String text = "";

    @Override
    public void insertString(int offset, String txt, AttributeSet a) {
        try {
            text = getText(0, getLength());
            if ((text + txt).matches("^[a-zA-Z]{2}$")) {
                super.insertString(offset, txt, a);
            }
         } catch (Exception ex) {
            Logger.getLogger(LetterDocument.class.getName()).log(Level.SEVERE, null, ex);
         }

        }
    }
这甚至不允许我输入任何东西。然后我尝试了这个,我试着从另外两个线程组合起来,其中一个线程只允许输入字母,另一个线程限制字符:

    public class LetterDocument extends PlainDocument {
    private int limit;
    private String text = "";

    LetterDocument(int limit) {
        super();
        this.limit = limit;
    }

    @Override
    public void insertString(int offset, String txt, AttributeSet a)
            throws BadLocationException {
        if (txt == null)
            return;
        try {
            text = getText(0, getLength());

            if (((text + txt).matches("[a-zA-Z]"))
                    && (txt.length()) <= limit) {
                super.insertString(offset, txt, a);
            }
        } catch (Exception ex) {
            Logger.getLogger(LetterDocument.class.getName()).log(Level.SEVERE,
                    null, ex);
        }

    }
}
公共类LetterDocument扩展了PlainDocument{
私有整数限制;
私有字符串text=“”;
信笺(整数限制){
超级();
这个极限=极限;
}
@凌驾
公共void insertString(int偏移量、字符串txt、属性集a)
抛出BadLocationException{
如果(txt==null)
返回;
试一试{
text=getText(0,getLength());
if(((text+txt).matches(“[a-zA-Z]”)匹配)

&&(txt.length())不要使用自定义文档

请改为使用
DocumentFilter
。请阅读上Swing教程中的部分,以了解限制可以在文档中输入的字符数的工作示例

然后添加一些额外的逻辑,确保只添加字母


或者更简单的选择是使用带有字符掩码的JFormattedTextField。请再次参阅上的教程。

我对我的电话号码和邮政编码文本字段使用了掩码格式化程序,因为它们需要二维掩码(字符限制和掩码),我对地址、城市、名称使用了DocumentFilter,因为我只想将其限制为字符,不太担心大小。谢谢!而且,我没有收到任何错误,但是关于JTextField和JFormattedTextfield的所有内容都是一样的吗,比如方法,除了灵活性?我是在问,万一我必须通过和克修改。