Wie kann ich die Länge eines JTextField die Inhalte während der Benutzer tippt bekommen?

StackOverflow https://stackoverflow.com/questions/401598

  •  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?

War es hilfreich?

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.

KeyEvents 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());
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top