Begrenzen eines Textfeldes



  • Hallo!

    Gibt es irgend eine Möglichkeit die Anzahl der EINZUGEBENDEN Zeichen
    in einem TextField zu beschränken.
    Ich rede nicht davon in dem Konstruktor die Länge anzugeben, denn da ist
    die Anzahl der einzugebenden Zeichen immer noch unendelich.

    Danke im Voraus,
    Gin83



  • Du kannst einen KeyListener an das JTextField hängen und keyTyped(KeyEvent) abfangen. KeyEvent bietet eine Methode consume(). Das "verschluckt" Zeichen, die über die Länge des JTextField hinausgehen. Ist aber wohl eher eine unsaubere Methode. 😃

    Aber die Klasse JTextField bietet auch eine Methode getColumns. Vielleicht kannst du damit auch was anfangen 😕



  • Um das machen zu können benötigst du ein eigenes Document-Objekt. Zwar könnte man dies wohl auch über KeyListener etc. bewerkstelligen, doch ist diese Lösung nicht sehr elegant.

    Hier die Klasse für das LimitedDocument

    /**
     * Diese Klasse ist ein Dokument für Textfelder, welches die Eingabe auf
     * n Zeichen beschränkt.
     *
     * Die Zuweisung zum JTextField geschieht beispielsweise über
     * <yourTextField>.setDocument(new LimitedDocument(5));
     * Danach darf das TextField höchstens 5 Zeichen enthalten.
     */
    public class LimitedDocument extends PlainDocument{
        private int limit;
    
        /**
         * Konstruktor für das limitierte Dokument
         * @param int limit: maximale Anzahl der einzugebenen Zeichen
         */
        public LimitedDocument(int newLimit){
            super();
            if (limit < 0){
                limit = 0;
            } else {
                limit = newLimit;
            }
        }
    
        /**
         * Funktion überschreibt die Methode insertString von PlaintDocument
         * @param int offset: Position
         * @param String str: der String
         * @param AttributeSet attr: Attributset
         */
        public void insertString (int offset, String str, AttributeSet attr)
                throws BadLocationException {
            if (str == null) return;
    
            if ((getLength() + str.length()) <= limit){
                super.insertString(offset, str, attr);
            }
         }
    }
    


  • Genau das hab ich gesucht. Perfekte Lösung danke 🙂 👍


Anmelden zum Antworten