无法弄清楚我的文档筛选器出了什么问题



我尝试将其他人制作的自定义PlainDocument组合在一起,以满足我的需求,但由于我不知道PlainDocument的机制,我失败了,它也不起作用。我需要一些东西来确保我的文本字段只允许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);
        }
    }
}

我不知道怎么了。

不要使用自定义文档。

而是使用DocumentFilter。阅读Swing教程中关于实现文档过滤器的部分,了解一个限制文档中可以输入的字符数的工作示例。

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

或者,一个更简单的选项是使用带有字符掩码的JFormattedTextField。请再次参阅关于使用格式化文本字段的教程。

相关内容

  • 没有找到相关文章

最新更新