ユーザーがテキストフィールドに入力できる文字の最大長を制限しようとしていますが、機能していないようです。
コードは次のとおりです。
text2 = new JTextField("Enter text here",8);
私が間違っていることはありますか?制限を適切に機能させるにはどうすればよいですか?
ユーザーがテキストフィールドに入力できる文字の最大長を制限しようとしていますが、機能していないようです。
コードは次のとおりです。
text2 = new JTextField("Enter text here",8);
私が間違っていることはありますか?制限を適切に機能させるにはどうすればよいですか?
現在のコードは最大長を設定しているのではなく、表示される列の数を定義しています。
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));
コンストラクター
new JTextField("Enter text here",8);
表示列の数を 8 に設定しますが、それ以上の入力を制限しません。
DocumentFilterを使用して、入力の長さを制限できます。
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");
}
}
}