2012-10-25 22 views
5

ユーザーがテキストフィールドに入力できる文字の最大長を制限しようとしていますが、動作していないようです。ここでJTextFieldの入力の長さが制限されていません

はコードです:

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

は私が間違っているのはありますか?限界をどのようにして正しく働かせることができますか?

答えて

9

コンストラクタ

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

は8に表示可能な列の数を設定しますが、よりに入ることからあなたを制限するものではありません。

DocumentFilterを使用して入力の長さを制限することができます。

+1

あなたがここにこれを行う方法の良い例を見つけることができます(http://www.java2s.com/Tutorial/Java/0240__Swing/LimitJTextFieldinputtoamaximumlength.htm)。 – Designpattern

10

現在のコードでは、表示可能な列の数を定義するのではなく、最大長を設定していません。データの最大長を制限する

、あなたは最大長制限を破るの追加を許可しないテキストフィールドのカスタム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)); 
0

だけの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"); 
     } 
    } 
} 
0

これが役立つと確信しています。私はkeyTypedタイプのKeyListenerJTextFieldに追加しました。 KeyListenerは、ユーザがifステートメントに定義された制限を超える文字を入力したときに機能します。

text2 = new JTextField("Enter text here",8); 
text2.addKeyListener(new KeyAdapter() { 
     public void keyTyped(KeyEvent e) { 
      if (text2.getText().length() == 8) { 
       e.consume(); 
      } 
     } 
    });