6

ユーザーがテキストフィールドに入力できる文字の最大長を制限しようとしていますが、機能していないようです。

コードは次のとおりです。

text2 = new JTextField("Enter text here",8);

私が間違っていることはありますか?制限を適切に機能させるにはどうすればよいですか?

4

4 に答える 4

16

現在のコードは最大長を設定しているのではなく、表示される列の数を定義しています。

Documentデータの最大長を制限するには、最大長の制限を破る追加を許可しないテキストフィールドのカスタムを設定できます。

public final class LengthRestrictedDocument extends PlainDocument {

  private final int limit;

  public LengthRestrictedDocument(int limit) {
    this.limit = limit;
  }

  @Override
  public void insertString(int offs, String str, AttributeSet a)
      throws BadLocationException {
    if (str == null)
      return;

    if ((getLength() + str.length()) <= limit) {
      super.insertString(offs, str, a);
    }
  }
}

次に、このドキュメントを使用するようにテキストフィールドを設定します。

text2.setDocument(new LengthRestrictedDocument(8));
于 2012-10-25T19:18:26.747 に答える
9

コンストラクター

new JTextField("Enter text here",8);

表示列の数を 8 に設定しますが、それ以上の入力を制限しません。

DocumentFilterを使用して、入力の長さを制限できます。

于 2012-10-25T19:15:22.477 に答える
-1

JTextField クラスを拡張し、コンストラクターで KeyReleased イベントをオーバーライドして、長さをチェックする新しいメソッドをポイントするだけです。

package gui;

import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;

import javax.swing.JTextField;

public class RecordClassTextField extends JTextField {

    public RecordClassTextField() {
        this.addKeyListener(new KeyAdapter() {
            @Override
            public void keyReleased(KeyEvent e) {
                cleanText();
            }
        });
    }

    private void cleanText()
    {
        if(this.getText().length() > 17){
            System.out.println("Over 17");
        }
    }
}
于 2014-08-04T02:09:32.303 に答える