Nur Buchstaben zum Eingeben zulassen

Hallo,

ich möchte dem User ermöglichen, einen Namen einzugeben. Dabei sollen nur Buchstaben als eingabe möglich sein - Länge egal.

Mien erster Gedanke war, das mit einem JFormattedField zu machen. Dabei habe ich folgende Seite gefunden: http://docs.oracle.com/javase/tutorial/uiswing/components/formattedtextfield.html

Meine Frage ist nun: Wie erstelle ich eine Maske, die es erlaubt, beliebig viele Buchstaben zuzulassen?

Aus der Tabelle in der Mitte der Seite entnehme ich, dass ich eine Buchstabeneingabe mit “?” maskieren lassen. Aber wie stelle ich eine Anzahl dar?

[QUOTE=Florian]Hallo,

ich möchte dem User ermöglichen, einen Namen einzugeben. Dabei sollen nur Buchstaben als eingabe möglich sein - Länge egal.[/QUOTE]

If, While, For ?

Es ist physikalisch nicht möglich eine Unbegrenzte Menge an Buchstaben zu schreiben (RAM zu knapp etc.) Es muss irgendwo eine Grenze geben. Wenn du es in Swing und einer TextField machen willst, schau dir mal den DocumentListener an damit sollte es möglich sein den String auf ungültige Zeichen zu überprüfen.

http://docs.oracle.com/javase/7/docs/api/javax/swing/JTextField.html

Danke, Prototype!

man soll ja möglichst Räder nicht neu schleifen,

wenn es schon JFormattedTextField/ MaskFormatter gibt,
wäre eine winzige Option, ein boolean: beliebige Eingabelänge zulassen, etwa die Mask zu wiederholen, wünschenswert,
oder RegEx-Formulierung der Maske (edit: wobei, da hatte ich doch was gesehen, schaue nochmal nach)

erstaunlich dass anscheinend nicht vorhanden, auf die Schnelle nichts zu zu finden,
dann müssen es wohl all die anderen unsauberen Wege mit Listener sein,

die korrigieren dann auch während der Eingabe jedes Zeichen,
was normalerweise wünschenswert ist und Schleifen (While, For) anscheinend für nach der Eingabe alt aussehen läßt

Ohne genauer nachgesehen zu haben und ohne auch nur im Ansatz Ahnung von Swing zu haben:
http://docs.oracle.com/javase/tutorial/uiswing/misc/focus.html#inputVerification
[japi]InputVerifier[/japi]
Damit sollten sich eigentlich beliebige Ausdrücke zur Verifizierung verwenden lassen.

http://www.java2s.com/Tutorial/Java/0240__Swing/RegexFormatterwithaJFormattedTextField.htm

war noch das was ich gesehen hatte, akzeptiert falsche Eingaben am Ende nicht,
aber Eingabe zunächst erlaubt, keine Art von Rückmeldung, hmm

da muss man wohl wirklich selber zum großen Schlag ausholen…

[QUOTE=cmrudolph]Ohne genauer nachgesehen zu haben und ohne auch nur im Ansatz Ahnung von Swing zu haben:
http://docs.oracle.com/javase/tutorial/uiswing/misc/focus.html#inputVerification
[japi]InputVerifier[/japi]
Damit sollten sich eigentlich beliebige Ausdrücke zur Verifizierung verwenden lassen.[/QUOTE]

Der InputVerifier überprüft nach Verlassen des Textfeldes (Fokusverlust). Mit einem DocumentFilter kann man schon während der Eingabe die maximale Länge und die zugelassenen Zeichen festlegen. Den DocumentFilter kann man einem normalen JTextField zuweisen.

Imho solltest du die Finger vom FormattedTextField lassen, der Formatter ist einfach sowas von unflexibel. Mit einem normalen Textfeld und einem DocumentFilter wie schon erwähnt geht das am besten. Du musst dich allerdings kurz in Reguläre Ausdrücke (Regex) einlesen.