如何在JTextField中设置财务代码文档过滤器

时间:2016-03-10 16:40:16

标签: java swing jtextfield documentfilter

我正在使用Java swing程序。我想在我的JPanel中插入一个JTextFieldFormat,其字符数限制并转换为UPPER文本中的所有文本。 所以我构建了这段代码:

textCodiceFiscale = new JTextField();
textCodiceFiscale.setDocument(new PersonalizzaJtextField(numberCharacter));
DocumentFilter filter = new UppercaseDocumentFilter();
        ((AbstractDocument) textCodiceFiscale.getDocument()).setDocumentFilter(filter);

这是UppercaseDocumentFilter类:

class UppercaseDocumentFilter extends DocumentFilter {
    public void insertString(DocumentFilter.FilterBypass fb, int offset,
        String text, AttributeSet attr) throws BadLocationException {

    fb.insertString(offset, text.toUpperCase(), attr);
    }

    public void replace(DocumentFilter.FilterBypass fb, int offset, int length,
        String text, AttributeSet attrs) throws BadLocationException {

    fb.replace(offset, length, text.toUpperCase(), attrs);
    }
}

这是PersonalizzaJTextField类:

public class PersonalizzaJtextField extends PlainDocument {

    //private StringBuffer cache = new StringBuffer();
    private int lunghezzaMax;

    public PersonalizzaJtextField(int lunghezzaMax){
        super();
        this.lunghezzaMax = lunghezzaMax;       
    }

    public void insertString(int offset, String str, AttributeSet attr) throws BadLocationException{
        if (str == null)
            return;

        if ((getLength() + str.length()) <= lunghezzaMax) {
            super.insertString(offset, str, attr);
        }   
    }
}

现在问题是两个:

1)使用此代码,我只能在我的JTextField中插入UPPER字符,但我在第二行限制字符数,不起作用。

2)我想为这个JTextField创建一个模板,我必须在这个模式下插入数字或文本:

  

6个字符2个数字1个字符2个数字1个字符3个数字1个字符。

可以这样做吗?

1 个答案:

答案 0 :(得分:2)

  

我想为此JTextField创建一个模板,我必须在此模式下插入数字或文本:

使用JFormattedTextField。您可以使用MaskFormatter让JFormattedTextField为您进行编辑。使用适当的掩码,您可以指定数字或大写字符。

阅读How to Use Formatted Text Fields上Swing教程中的部分,了解更多信息和示例。

顺便说一下,格式化文本字段会自动使用MaskFormatter为您创建DocumentFilter,因此您需要一个自定义过滤器。

为教程添加书签。您还在上一个关于此主题的问题中获得了教程的链接。使用Swing基础知识教程。