Gibt es eine praktikable Möglichkeit, die Anzahl an Textfeldzeichen, welche
ein User eingeben kann zu begrenzen.
Also das man z.B. max. 20 Zeichen eingeben kann ?
Ich suche aber keine Lösung die nur den String ausliest und abschneidet.
Das Textfeld soll wirklich max. 20 Zeichen aufnehmen können.
Generiere ein neues “PlainDocument”, und setze es dem JTextField (über die Methode setDocument). Dann erstellst du eine neue Klasse, erbst von “DocumentFilter”, und setzt eine Instanz dieser neuen Klasse über die Methode “setDocumentFilter” von “PlainDocument”. Dein neuer Filter wird immer aufgerufen, wenn der Benutzer etwas am Text ändert -> du kannst in dem DocumentFilter ganz genau steuern, was wann wie wo eingefügt, gelöscht oder ersetzt werden darf.
Einen kleinen Nachtrag muss ich doch noch liefern!
Die Anzahl der Zeichen anhand des Offsets auszumachen ist sehr
ungeschickt. Wenn der Nutzer den Cursor im Textfeld verschiebt,
ändert sich zwangsläufig auch der Offset!
Das PlainDocument bietet aber die Methode getLength(). Damit lässt sich die Anzahl der Zeichen im Textfeld
ermitteln.
public class LimitedTextField extends JTextField{
public LimitedTextField( int maxChars ) {
this.maxChars = maxChars > -1 ? maxChars : 0;
setDocument( new LimitsPlainDocument() );
}
private class LimitsPlainDocument extends PlainDocument{
@Override
public void insertString(int offset, String s, AttributeSet aSet) throws BadLocationException {
if( getLength() < maxChars )
super.insertString(offset, s, aSet);
}
}
protected int maxChars;
}