2012-10-25 11 views
5

Ich versuche, die maximale Länge des Zeichens zu begrenzen, die ein Benutzer in einem Textfeld eingeben kann, aber es scheint nicht zu funktionieren. HierBegrenzung der Länge der Eingabe in JTextField funktioniert nicht

ist der Code:

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

Gibt es etwas, was ich falsch mache? Wie kann ich das Limit für eine ordnungsgemäße Arbeit festlegen?

Antwort

9

Der Konstruktor

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

legt die Anzahl der sichtbaren Spalten bis 8, aber sie nicht mehr von der Eingabe beschränken.

Sie könnten eine DocumentFilter verwenden, um die Eingabelänge zu beschränken.

+1

Sie können ein gutes Beispiel dafür finden, wie dies hier zu tun (http://www.java2s.com/Tutorial/Java/0240__Swing/LimitJTextFieldinputtoamaximumlength.htm). – Designpattern

10

Ihr aktueller Code legt nicht die maximale Länge fest, sondern definiert die Anzahl der sichtbaren Spalten.

Um die maximale Länge der Daten zu beschränken, können Sie eine benutzerdefinierte Document für das Textfeld festlegen können, dass die maximale Länge Beschränkung nicht bricht Ergänzungen erlauben:

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); 
    } 
    } 
} 

Dann wird Ihr Textfeld gesetzt, dies zu nutzen Dokument:

text2.setDocument(new LengthRestrictedDocument(8)); 
0

einfach die JTextField Klasse erweitern und das keyReleased Ereignis im Konstruktor überschreibt und auf eine neue Methode zeigt, dass die Länge überprüft:

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

Ich bin mir sicher, dass dies Ihnen helfen wird. Ich habe gerade eine KeyListener des Typs zu der JTextField hinzugefügt. Die KeyListener funktioniert, wenn Benutzer Zeichen mehr als das definierte Limit in if Anweisung eingeben.

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