Wie kann ich die Länge eines JTextField die Inhalte während der Benutzer tippt bekommen?
-
03-07-2019 - |
Frage
JTextField ein keyTyped Ereignis hat, aber es scheint, dass es zum Zeitpunkt der Inhalt der Zelle feuert noch nicht geändert.
Aufgrund dieser .length () ist immer falsch, wenn hier lesen.
Es muss eine einfache Art und Weise sein, die Länge des Erhaltens, wie es für den Benutzer nach einem Tastendruck erscheint?
Lösung
Dies ist wahrscheinlich nicht der optimale Weg (und es ist eine Weile her), aber in der Vergangenheit, ich habe eine DocumentListener zum JTextField und auf eines des Ereignisses (INSERT, UPDATE, entfernen) Ich füge hinzu:
evt.getDocument().getLength()
, die die Gesamtlänge des Textes Feldinhalt zurück.
Andere Tipps
Dies kann zu diesem "Bug" (oder besser gesagt "Feature" in Beziehung gesetzt werden )
Die Zuhörer werden vor der wichtigsten Ereignisse informiert zu deren Verarbeitung zu lassen die Zuhörer zu „stehlen“, die Ereignisse von ihnen verbrauchen. Das gibt Kompatibilität mit dem älteren AWT Begriff von Ereignissen.
Die "getippt" Ereignistext bedeutet nicht, wurde in die Komponente eingegeben . Das ist kein Fehler, ist es das Verhalten bestimmt.
Eine mögliche Lösung ist auf ein zugehöriges Dokument
// Listen for changes in the text
myTextField.getDocument().addDocumentListener(new DocumentListener() {
public void changedUpdate(DocumentEvent e) {
// text was changed
}
public void removeUpdate(DocumentEvent e) {
// text was deleted
}
public void insertUpdate(DocumentEvent e) {
// text was inserted
}
});
Hinweis: Dies ist unabhängig davon funktioniert, wie der Text geändert wird; über eine Zwischenablage Ausschneiden / Einfügen, progamatic „setText ()“ auf der TextField- oder dem Benutzer die Eingabe in das Feld auf der Benutzeroberfläche.
KeyEvent
s sind Low-Level-Ereignisse, die nicht geeignet sind hier [das klingt vertraut].
Wie funktioniert das JTextField
System weiß, dass ein Zeichen eingegeben wurde? Durch eine Taste getippt Ereignis (IIRC, durch die PL & F durchgeführt). Hat das Ereignis in dem System Hörer geschickt bekommen, bevor Sie Ihren Hörer? Es könnte oder nicht.
In diesem Fall möchten Sie wahrscheinlich auf die Document
gehen und ein höherer Ebene Zuhörer hinzuzufügen. Mit Schaukel ist es eine gute Idee für das Modell früh zu gehen - die ‚J‘ Klasse Schnittstellen inkohärent ist. Wenn Sie die Eingangsdaten abfängt, dann möchten Sie wahrscheinlich ein eigenes Modell (oder im Fall von Document
ein DocumentFilter
).
Mit diesem Code:
public void jTextField6KeyReleased(java.awt.event.KeyEvent evt)
{
System.out.println(jTextField6.getText().length());
}