1

n 文字が挿入された後、JTextField でのユーザー入力を「無効にする」このコードがあります。

JTextField tf = new JTextField();
tf.addKeyListener(new KeyAdapter() {
    public void keyTyped(KeyEvent e) {
        if (((JTextField) e.getSource()).getText().length() > n) {
            e.consume();
        }
    }
});

それは機能しますが、代替手段があるかどうか疑問に思っていました。古い遅いコンピューターで試してみたので、テキストフィールドに何かを入力すると文字が追加され、その後消えてしまいます...e.consume()ユーザー入力後に使用したくない代わりに挿入を直接防止します。

出来ますか?

編集

JTextFieldこの例にのみ使用したことを忘れていましたが、このコードをJTextPaneJTextAreaなどの一般的なテキスト入力コンポーネントで動作させたいと思います。

4

1 に答える 1

3

DocumentSizeFilterクラスを使用できます

この特定の用途のために作成されたもの: http://docs.oracle.com/javase/tutorial/uiswing/examples/components/TextComponentDemoProject/src/components/DocumentSizeFilter.java

ドキュメント フィルタセクションの実装内でこれを行う方法に関するチュートリアル:

そこから引用:

ドキュメントで使用できる文字を制限するために、DocumentSizeFilter は DocumentFilter クラスの insertString メソッドをオーバーライドします。このメソッドは、テキストがドキュメントに挿入されるたびに呼び出されます。また、ユーザーが新しいテキストを貼り付けたときに呼び出される可能性が最も高い replace メソッドもオーバーライドします。一般に、テキストの挿入は、ユーザーが新しいテキストを入力または貼り付けたとき、または setText メソッドが呼び出されたときに発生します。DocumentSizeFilter クラスの insertString メソッドの実装を次に示します。

public void insertString(FilterBypass fb, int offs,
                         String str, AttributeSet a)
    throws BadLocationException {

    if ((fb.getDocument().getLength() + str.length()) <= maxCharacters)
        super.insertString(fb, offs, str, a);
    else
        Toolkit.getDefaultToolkit().beep(); }
于 2013-05-21T13:55:59.003 に答える