2008-12-30 10 views

Antwort

8

Dies ist wahrscheinlich nicht der optimale Weg (und es ist eine Weile her), aber in der Vergangenheit habe ich eine DocumentListener zum JTextField und auf eines des Ereignisses (INSERT, UPDATE, entfernen) Ich fügte hinzu:

evt.getDocument().getLength() 

Gibt die Gesamtlänge des Inhalts des Textfelds zurück.

3

Dies kann zu diesem "bug" (or rather "feature")

Die Zuhörer der wichtigsten Ereignisse für sie die Zuhörer die Ereignisse zu ermöglichen Verarbeitung vor benachrichtigt werden, in Beziehung gesetzt werden „stehlen“, um sie durch den Verzehr. Dies gibt Kompatibilität mit dem älteren AWT-Begriff der konsumierenden Ereignisse.
Das "getippte" Ereignis bedeutet nicht, dass Text in die Komponente eingegeben wurde. Dies ist kein Fehler , es ist ein beabsichtigtes Verhalten.

Eine mögliche Lösung ist dies nicht funktioniert Angelegenheit zu einem associated Document

// 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 zu hören, wie der Text geändert wird; über eine Zwischenablage cut/paste, progamatic "setText()" auf der TextField, oder der Benutzer tippt in das Feld auf der Benutzeroberfläche.

3

KeyEvent s sind Low-Level-Ereignisse, die hier nicht angebracht sind [das klingt bekannt]. Wie kann das System JTextField wissen, dass ein Zeichen eingegeben wurde? Durch ein Key-Typ-Ereignis (IIRC, durch die PL & F). Wird das Ereignis vor dem Listener an den Systemlistener gesendet? Es könnte oder auch nicht tun.

In diesem Fall möchten Sie wahrscheinlich zu Document gehen und einen übergeordneten 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).

2

Mit diesem Code:

public void jTextField6KeyReleased(java.awt.event.KeyEvent evt) 
{ 
    System.out.println(jTextField6.getText().length()); 
} 
+0

Betrachten Sie Ihre Antwort Erweiterung auf die Fragesteller zu erklären, warum dies das gewünschte Ergebnis erzielt, was möglicherweise zu Dokumentation zu verknüpfen. Dies ist nur am Rande nützlich. –

Verwandte Themen