同时设置jtextfield textlimit和大写

时间:2013-03-26 16:07:21

标签: java swing jtextfield documentfilter

我在我的应用程序中有一些jtextfield,我想把其中一个允许大写和小写,并且还可以引入可以引入jtextfield的字符数限制。我必须分类,一个是限制,另一个是大写或小写。

代码到jtextfield的限制:

package tester;

import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;
import javax.swing.text.PlainDocument;

public class TextLimiter extends PlainDocument {

    private Integer limit;

    public TextLimiter(Integer limit) {
        super();
        this.limit = limit;
    }

    public void insertString(int offs, String str, AttributeSet a) throws BadLocationException {
        if (str == null) {
            return;
        }
        if (limit == null || limit < 1 || ((getLength() + str.length()) <= limit)) {
            super.insertString(offs, str, a);
        } else if ((getLength() + str.length()) > limit) {
            String insertsub = str.substring(0, (limit - getLength()));
            super.insertString(offs, insertsub, a);
        }
    }
}

以下是设置大写的代码,反之亦然:

package classes;

import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;
import javax.swing.text.DocumentFilter;

public class upperCASEJTEXTFIELD extends DocumentFilter {

    @Override
    public void insertString(DocumentFilter.FilterBypass fb, int offset, String text,
            AttributeSet attr) throws BadLocationException {
        fb.insertString(offset, text.toUpperCase(), attr);
    }

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

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

要恢复我的问题,我想设置一个jtextfield limit = 11和大写。

2 个答案:

答案 0 :(得分:2)

PlainDocument doc = new TextLimiter();
doc.setDocumentFiletr(new upperCASEJTEXTFIELD());
JTextField textField = new JTextField();
textField.setDocument(doc);

答案 1 :(得分:1)

  

我必须分类,一个是限制,另一个是大写或小写。

为什么需要单独的课程?仅仅因为您碰巧在Web上找到使用两个不同类的示例并不意味着您需要以这种方式实现您的需求。

您可以轻松地将两个类的逻辑组合成一个DocumentFilter类。

或者,如果你想获得一点点发烧友,可以查看Chaining Document Filters,其中显示了如何将单个文档过滤器合并为一个。