JTextField hat ein keyTyped-Ereignis, aber es scheint, dass der Inhalt der Zelle zu diesem Zeitpunkt noch nicht geändert wurde.
Aus diesem Grund ist .length () immer falsch, wenn Sie hier lesen.
Es muss einen einfachen Weg geben, um die Länge zu erhalten, wie sie dem Benutzer nach einem Schlüsselstrich erscheint?
Dies ist wahrscheinlich nicht der optimale Weg (und es ist eine Weile her), aber in der Vergangenheit habe ich einen DocumentListener zum JTextField und zu jedem der Ereignisse hinzugefügt (einfügen, aktualisieren, entfernen) I:
%Vor%Gibt die Gesamtlänge des Inhalts des Textfelds zurück.
Dies könnte mit diesem "Bug" (oder besser "Feature") zusammenhängen / p>
Die Listener werden vor der Verarbeitung der Schlüsselereignisse benachrichtigt erlauben Sie den Zuhörern, die Ereignisse zu "stehlen", indem Sie sie konsumieren. Das gibt Kompatibilität mit dem älteren Konzept des Konsumierens von Ereignissen.
Das "typisierte" Ereignis bedeutet nicht, dass Text in die Komponente eingegeben wurde . Das ist kein Fehler, es ist beabsichtigtes Verhalten.
Eine mögliche Lösung ist ein zu hören Dokument
%Vor%Beachten Sie, dass dies funktioniert, egal wie der Text geändert wird; über eine Zwischenablage ausschneiden / einfügen, progamatic "setText ()" auf der TextField, oder der Benutzer in das Feld auf der Benutzeroberfläche eingeben.
KeyEvent
s sind Low-Level-Ereignisse, die hier nicht angebracht sind [das klingt vertraut].
Wie weiß das JTextField
System, dass ein Charakter eingegeben wurde? Durch ein Key-Typ-Event (IIRC, erfolgt durch die PL & amp; F). Wird das Ereignis vor dem Listener an den Systemlistener gesendet? Es könnte oder könnte nicht tun.
In diesem Fall möchten Sie wahrscheinlich zu Document
gehen und einen höheren Listener hinzufügen. Mit Swing ist es eine gute Idee, früh auf das Modell zu setzen - die Interfaces der 'J' Klasse sind inkohärent. Wenn Sie Eingabedaten abfangen, möchten Sie wahrscheinlich ein benutzerdefiniertes Modell (oder im Fall von Document
a DocumentFilter
).
Tags und Links java swing events jtextfield