# JTextField max. 8 Zeichen, nur Buchstaben



## tdc (6. Dez 2009)

Hi!
Ich will ein JTextField so verändern, dass man maximal 8 Zeichen eingeben kann und nur Groß- und kleinbuchstaben zugelassen sind (also keine Sonderzeichen, Punkte, usw.).
Zu der 8-Zeichen-Beschränkung habe ich einige Male gelesen, dass man nur die maximale Zeichenanzahl als Parameter angeben muss.
Doch wenn ich

```
JTextField enterName = new JTextField(8);
```
eingebe, kann man trotzdem noch beliebig viele Zeichen eingeben.

Ich hoffe ihr könnt mir helfen!

mfg tdc


----------



## Tobias (6. Dez 2009)

Weil dieser Konstruktor nur die bevorzugte Größe des JTextFields festlegt. Dein Ziel sollte sich mit JFormattedTextField erreichen lassen.


----------



## javimka (6. Dez 2009)

Dein Parameter 8 sagt nur, welche Breite das JTextField haben sollte, nämlich 8 Mal die Länge eines m (oder so).

Um nur eine bestimmte Art von Buchstaben zu akzeptieren könntest du mal das JFromatedTextField anschauen. Um die Anzahl Buchstaben zu beschränken, köntest du dem Textfeld einen KeyListener anhängen und keyTyped(KeyEvent event) überschreiben. Bei jedem Aufruf, soll dann der aktuelle Text im Feld überprüft und gegebenfalls zurückgesetzt werden.


----------



## eRaaaa (6. Dez 2009)

hab auch mal eine frage diesbezüglich an die swing gurus:

könnte man nicht auch eine eigene document-klasse erstellen, die z.b. von PlainDocument erbt und dann insertString überschreibt? oder ist das häßlich?


----------



## javimka (6. Dez 2009)

Ich hoffe, du hälst nicht mich für einen Swing Guru, denn ich habe keine Ahnung, ob das funktioniert oder hässlich ist oder was auch immer


----------



## André Uhres (6. Dez 2009)

tdc hat gesagt.:


> Ich will ein JTextField so verändern, dass man maximal 8 Zeichen eingeben kann und nur Groß- und kleinbuchstaben zugelassen sind (also keine Sonderzeichen, Punkte, usw.).


Wir könnten einen DocumentFilter setzen, etwa so:

Beitrag in die FAQs verschoben:
http://www.java-forum.org/bilder-gu...7213-jtextfield-dokumentarten.html#post587501


----------



## eRaaaa (6. Dez 2009)

dann war ich ja garnicht so falsch?


----------



## André Uhres (6. Dez 2009)

eRaaaa hat gesagt.:


> hab auch mal eine frage diesbezüglich an die swing gurus:
> 
> könnte man nicht auch eine eigene document-klasse erstellen, die z.b. von PlainDocument erbt und dann insertString überschreibt? oder ist das häßlich?



Auch wenn wir das Dokument einer Textkomponente setzen können, ist es meist einfacher, das automatisch eingestellte Dokument zu nutzen und, falls erforderlich, einen Dokument Filter zu benutzen um die Daten zu kontrollieren.


----------



## tdc (6. Dez 2009)

Danke für die vielen Antworten! Ich habe die Lösung mit dem JFormattedTextField genommen, aber ich habe jetzt noch eine Frage: ist es möglich, dass der Cursor des FormattedTextFields immer am Anfang ist, bzw. immer hinter dem letzten geschriebenen Buchstaben?
Mein Code für das JFormattedTextField sieht bisher so aus:

```
JFormattedTextField enterName = new JFormattedTextField();
		try
		{
			MaskFormatter enterNameFormatter = new MaskFormatter("????????");
			DefaultFormatterFactory enterNameFactory = new  DefaultFormatterFactory(enterNameFormatter);
			enterName.setFormatterFactory(enterNameFactory);
		}
		catch (Exception e)
		{
		}
		enterName.setFont(new Font("Arial", Font.BOLD, 25));
		enterName.setBounds(230, 210, 300, 50);
		enterName.setHorizontalAlignment(JFormattedTextField.CENTER);
		this.getContentPane().add(enterName);
```
Wenn ich das Programm aber jetzt starte und auf das Feld klicke, erscheint der Cursor an der stelle, an die ich geklickt habe. Wie kann ich erreichen, dass der Cursor immer beim ersten der 8 Stellen erscheint und ich auch keine Stelle auslassen kann?


----------

