2

アプリにいくつかのjtextfieldがあり、そのうちの1つを大文字と小文字を使用できるようにし、jtextfieldに導入できる文字数の制限を設定したいと思います。クラスを分けて、1つは制限を設定し、もう1つは大文字または小文字を設定する必要があります。

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以上を設定します。

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

クラスを分けて、1つは制限を設定し、もう1つは大文字または小文字を設定する必要があります。

なぜ別々のクラスが必要なのですか?Webで2つの異なるクラスを使用する例を見つけたからといって、そのように要件を実装する必要があるとは限りません。

両方のクラスのロジックを1つのクラスに簡単に組み合わせることができますDocumentFilter

または、少し凝ったものにしたい場合は、個々のドキュメントフィルターを1つに組み合わせる方法を示すChainingDocumentFiltersを確認できます。

于 2013-03-26T16:20:57.560 に答える