2

我的应用程序中有几个 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 限制 = 11 和大写。

4

2 回答 2

2
PlainDocument doc = new TextLimiter();
doc.setDocumentFiletr(new upperCASEJTEXTFIELD());
JTextField textField = new JTextField();
textField.setDocument(doc);
于 2013-03-26T16:13:46.403 回答
1

我必须单独上课,一个放限制,另一个放大写或小写。

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

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

或者,如果您想更高级一点,可以查看链接文档过滤器,它展示了如何将单个文档过滤器组合成一个。

于 2013-03-26T16:20:57.560 回答