Datumseingabe mit JFormattedTextField

Status
Nicht offen für weitere Antworten.
G

Guest

Gast
Hallo!

Ich möchte ein JFormattedTextField zur Datumseingabe benutzen. Das Datum soll in der Form dd.mm.yyyy eingegeben werden. Ich möchte allerdings, dass der Benutzer nur die Zahlen, nicht aber die Punkte zwischen den Datumsangaben eingeben muss. Mit
Code:
DateFormatter df = new DateFormatter(new SimpleDateFormat("dd.mm.yyyy"));
JFormattedTextField tfDate = new JFormattedTextField(df);
erreiche ich, dass nur gültige Daten eingegeben werden können, der User muss aber die Punkte zwischen den Datumseingaben explizit eintippen. Wenn ich nun
Code:
MaskFormatter mf = new MaskFormatter("##.##.####");
JFormattedTextField tfDate = new JFormattedTextField(mf);
verwende, dann sind müssen die Punkte zwischen den Datumsangaben nicht mehr eingegeben werden, aber es wird nicht überprüft, ob es sich bei der Eingabe um ein gültiges Datum handelt.

Kann man die beiden irgendwie kombinieren, oder gibt es eine andere Möglichkeit?
 

Karl

Aktives Mitglied
Hallo,

grundsätzlich kann man solche Datumsfelder beliebig ausbauen (z.B. Assistenzfunktion für Punkte, etc), nur
eben nicht so einfach.

Falls Dir eine abschließende Prüfung reicht, hier ein Beispiel:

Code:
        MaskFormatter mf = new MaskFormatter("##.##.####"); 
        JFormattedTextField tf = new JFormattedTextField(mf);
        tf.setInputVerifier(new InputVerifier() {
            private SimpleDateFormat sdf = new SimpleDateFormat("dd.MM.yyyy");
            public boolean verify(JComponent input) {
                boolean res = true;
                JTextComponent tc = (JTextComponent)input;
                String newContent = tc.getText();
                if (newContent.length() > 0) {
                    try {
                        Date d = sdf.parse(newContent);
                        
                        if (!sdf.format(d).equals(newContent)) {
                            tc.selectAll();
                            res = false;
                        }
                    }
                    catch (ParseException ex) {
                        tc.selectAll();
                        res = false;
                    }            
                }
                return res;
            }
        });

Für die meisten Anwendungen sollte das reichen. Du kannst natürlich auch einfach den Text leer setzen
und das Verlassen des Feldes erlauben, falls Du den Benutzer grundsätzlich nicht einsperren willst.

Ich bin mal gespannt, ob jetzt erboste Kommentare kommen, wie man alles Datumsfelder besser
gestalten kann :D .

Gruß,
Karl
 
G

Guest

Gast
Vielen Dank für Deine Antwort. Das hat mir schon mal sehr geholfen! :toll:

Eine Frage hab ich noch:
Ich habe eine eigene Klasse "DateInputField" erstellt, die von JFormattedTextField erbt. Den MaskFormatter habe ich dann im Konstruktor der Klasse erzeugt und mit setFormatter() gesetzt. Wenn ich das so mache scheint es aber nicht zu funktionieren. Die Punkte sind zwar da, man kann aber beliebig viele Zahlen und auch Buchstaben eingeben. Wenn ich allerdings den MaskFormatter dem Konstruktor mitgebe und im Konstruktor dann super(formatter); aufrufe, dann funktioniert es wie erwartet.

Weiß jemand warum das so ist?
 

Karl

Aktives Mitglied
Hallo,

Die API sagt zu setFormatter (übrigens protected)
You should not normally invoke this, ...

Man soll stattdessen die Factory setzen. Dass Du so eine "halbe Funktion" beobachtest,
liegt wohl daran, dass innerhalb von JFormatted-Textfield nicht überall immer wieder
die Factory verwendet wird, an manchen Stellen aber schon.

Du musst übrigens keine Factory schreiben, es sollte reichen im Konstruktor von DateInputField zu schreiben:
Code:
   this.setFormatterFactory(new DefaultFormatterFactory(meinNeuerGanzBesondererFormatter));

Was anderes macht der Konstruktor nämlich auch nicht.

Gruß,
Karl
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Datumseingabe in ein JFormattedTextfield AWT, Swing, JavaFX & SWT 2
C Datumseingabe AWT, Swing, JavaFX & SWT 2
R JDateChooser Datumseingabe via TextFeld wird verworfen AWT, Swing, JavaFX & SWT 8
G Datumseingabe in einem Textfeld AWT, Swing, JavaFX & SWT 2
F JFormattedTextField für kg und Währung AWT, Swing, JavaFX & SWT 6
S JFormattedTextField dezimal variabler Länge AWT, Swing, JavaFX & SWT 12
Ghostman1711 Java JFormattedTextfield MaskFormatter ohne Leerzeichen AWT, Swing, JavaFX & SWT 3
N Swing JFormattedTextField keine Werte nach Formatzuweisung AWT, Swing, JavaFX & SWT 0
M European Article Number (EAN) in JFormattedTextfield AWT, Swing, JavaFX & SWT 3
L JFormattedTextField AWT, Swing, JavaFX & SWT 3
B Swing JFormattedTextField AWT, Swing, JavaFX & SWT 4
Y JFormattedTextfield - Aktualisierung und Beschränkung AWT, Swing, JavaFX & SWT 4
V Swing Nullpointer Exception bei JFormattedTextField AWT, Swing, JavaFX & SWT 4
S Swing JFormattedTextField - bei nicht korrekter Eingabe Inhalt überschreiben AWT, Swing, JavaFX & SWT 5
S Swing JFormattedTextfield markiert nicht gesamten Inhalt AWT, Swing, JavaFX & SWT 4
C Swing Button in Textfeld (JFormattedTextField) AWT, Swing, JavaFX & SWT 7
A jformattedtextfield unsichtbar und wieder sichtbar machen AWT, Swing, JavaFX & SWT 13
C Swing JFormattedTextField + Eurobetrag AWT, Swing, JavaFX & SWT 2
E Problem mit MaskFormatter und JFormattedTextField AWT, Swing, JavaFX & SWT 3
A EventListener für JFormattedTextField AWT, Swing, JavaFX & SWT 6
B Swing Betrag mit Komma aus jformattedtextfield auslesen. AWT, Swing, JavaFX & SWT 2
E Swing JFormattedTextField Live Validierung AWT, Swing, JavaFX & SWT 4
C Swing Default Werte für JFormattedTextField und Eingaben zurücksetzen AWT, Swing, JavaFX & SWT 5
G JFormattedTextField und DefaultButton AWT, Swing, JavaFX & SWT 6
B Swing JFormattedTextField auf mehreren JPanels in einer JTabbedPane AWT, Swing, JavaFX & SWT 3
G JFormattedTextField values AWT, Swing, JavaFX & SWT 8
R JFormattedTextField AWT, Swing, JavaFX & SWT 8
D Eingabemaske im JFormattedTextField ändern AWT, Swing, JavaFX & SWT 3
D JFormattedTextfield um Grafik erweitern AWT, Swing, JavaFX & SWT 15
N JFormattedTextField erst Verlassen, wenn Eingabe korrekt AWT, Swing, JavaFX & SWT 6
G JFormattedTextField lässt sich nicht mehr leeren AWT, Swing, JavaFX & SWT 4
N PropertyChangeListener an JFormattedTextField AWT, Swing, JavaFX & SWT 7
D Problem mit JFormattedTextField AWT, Swing, JavaFX & SWT 6
A Problem mit JFormattedTextField auslesen AWT, Swing, JavaFX & SWT 11
S JFormattedTextField und maximal 3 Stellen. AWT, Swing, JavaFX & SWT 11
M JFormattedTextField und Null-Werte AWT, Swing, JavaFX & SWT 4
E JformattedTextField, Dialog und weitere Kleinigkeiten . AWT, Swing, JavaFX & SWT 2
E Problem mit Validierende Eingabefeldern JFormattedTextField AWT, Swing, JavaFX & SWT 8
B JFormattedTextField mit DecimalFormat in ein Double AWT, Swing, JavaFX & SWT 11
C JFormattedTextField - nur bestimmte Zeichen zulassen AWT, Swing, JavaFX & SWT 3
H JFormattedTextField - Einen Preis eingeben lassen AWT, Swing, JavaFX & SWT 2
B Zeichen werden im JFormattedTextField überschrieben AWT, Swing, JavaFX & SWT 3
H JFormattedTextField AWT, Swing, JavaFX & SWT 4
W IP-Adresse mit JFormattedTextField AWT, Swing, JavaFX & SWT 5
F JFormattedTextField formatieren AWT, Swing, JavaFX & SWT 7
J [JFormattedTextField] Nur Zahlen eingebbar AWT, Swing, JavaFX & SWT 3
S [JFormattedTextField] Ja wie denn nun? AWT, Swing, JavaFX & SWT 2
B Wert bei JFormattedTextField automatisch aktualisieren AWT, Swing, JavaFX & SWT 2
H Frage zu JFormattedTextField AWT, Swing, JavaFX & SWT 2
G Problem mit JFormattedTextField AWT, Swing, JavaFX & SWT 3
F Problem mit JFormattedTextField AWT, Swing, JavaFX & SWT 4
A JFormattedTextField - vertical misalignment problems... AWT, Swing, JavaFX & SWT 12

Ähnliche Java Themen

Neue Themen


Oben