# jTextField eingabelänge beschränken



## Waldi (21. Mrz 2006)

Hallo ihr alle beisammen

Ich habe eine nette Gui Programmiert und möchte jezt nun die Eingabelänge der Textfelder beschränken, da ansonsten beim speichern in die Datenbank das zu lange einfach  abgeschn/itten wird. 
Es sollte am besten so sein, das wenn man schreibt und die maximale Länge erreicht hat, man einfach nicht mehr weiterschreiben kann. Andere Lösungen sind aber auch ok. Es sollte nur nicht so sein das ne Meldung kommt "Eingabe zu lang". Da weis ja keiner wieviel zu lang.

Vielen Dank für eure eventuellen Antworten


Waldi

P.S: Hoffe das ist die richtige Kategorie. Ansonsten -> verschieben.


----------



## tini (21. Mrz 2006)

JTextField#setColumns(int length)


----------



## Illuvatar (21. Mrz 2006)

tini, das legt nur die Breite fest.

Waldi, schau mal hier, das ist prinzipiell das gleiche.


----------



## tini (21. Mrz 2006)

na gut! einen Versuch wars wert.
Man könnte es vielleicht auch noch mit nem FormattedTextField machen, oder? Da kann man dann auch angeben, was man eingeben darf.


----------



## Waldi (22. Mrz 2006)

Das hab ich mir auch gedacht aber aus jedem Text Field ein jFormattedtextFiel machen.... Und nebenbei muss ich dann ja das format auf XXXXXXXXXXXXXXX also jedes Zeichen und dann die Anzahl die eingegeben werden darf. Ist en bissel umständlich und sauber Programmiert sieht das auch ned aus. 

Mich wundert das es für diesen Fall keine eigene Methode giebt. Sowas ist doch bestimmt voll häufig gefragt oder??. Ich meine mann kann doch ned ewig eingeben dürfen.


Mfg Waldi


----------



## tini (22. Mrz 2006)

Eigentlich dachte ich auch, dass es ne fertige Methode gibt (deswegen auch er erste Post).

Du könntest dir an das TextField auch nen KeyListener dran hängen und dann nach jeder Eingabe (also nach jedem Tastendruck) dir den String holen und überprüfen, ob die Länge noch stimmt. Wenn nicht, einfach abschneiden.


----------



## SamHotte (22. Mrz 2006)

```
JTextField.setDocument(new MyTextFieldDocument(maxLength));
```

sorry, hat was gefehlt (ist lang her):


```
public class MyTextFieldDocument extends PlainDocument {

    private int maxLength_ = Integer.MAX_VALUE;

    /**
     * Erzeugt ein javax.swing.text.Document fuer das JTextField.
     * 
     * @param maxLength
     *            maximale Zeichenanzahl
     */
    public MyTextFieldDocument(final int maxLength) {
        this.maxLength_ = maxLength;
    }

    /**
     * Fügt den String nur dann ein, wenn die maximale Anzahl noch nicht überschritten ist.
     * 
     * @param offs
     *            Offset (Position, an der der String eingefuegt werden soll)
     * @param str
     *            einzufuegender String
     * @param a
     *            Attribut-Set (werden hier nicht weiter beachtet)
     * @throws BadLocationException
     *             wird "von oben" durchgereicht
     * @see javax.swing.text.AttributeSet
     */
    public void insertString(final int offs, final String str,
            final AttributeSet a) throws BadLocationException {
        if (str == null) {
            return;
        }
        int actualLength = this.getLength();
        if (actualLength + str.length() < this.maxLength_) {
            super.insertString(offs, str, a);
        } else {
            // z.B. beep()
        }
    }

}
```

_edit2: Kommentare übersetzt und Fehler mit der Längenberechnung (hoffentlich) beseitigt_


----------



## Sky (22. Mrz 2006)

Waldi hat gesagt.:
			
		

> Mich wundert das es für diesen Fall keine eigene Methode giebt. Sowas ist doch bestimmt voll häufig gefragt oder??. Ich meine mann kann doch ned ewig eingeben dürfen.



Die Methode müsste dann aber im Model liegen wegen MVC... also müsste das Document eine entsprechende Methode haben... gibt es aber nicht, daher ist IMHO ein eigenes Document die sauberste Lösung (wie bereits hier erwähnt).


----------



## Waldi (24. Mrz 2006)

Funzt Prima Dankeschön


----------



## Waldi (6. Apr 2006)

Ein kleiner Schönheitsfehler hat das die Methode:
Die einzugebende Anzahl der Buchstaben ist immer um 1 kleiner als die beim Methodenaufruf angegebene.


----------



## SamHotte (11. Mai 2006)

dann muss Zeile 35 das '<' auf '<=' geändert werden.


----------

