[Erledigt] [Erledigt] JTextfeld Anzahl der Zeichen begenzen

Hallo!

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.

Gruß …

Es gibt da nichts vorgefertigtes, aber wie sollte das sonst gehen, wenn nicht String auslesen und abschneiden?

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.

Vielen Dank für die Lösungsansätze!
Ich habe es jetzt wie folgt gelöst.



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( offset < maxChars )
                super.insertString(offset, s, aSet);
        }
    }


    protected int maxChars;

}


Mfg Unreg.

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;

}

Schönes Wochenende!