2008-12-30 16 views

Odpowiedz

8

Prawdopodobnie nie jest to optymalny sposób (i to już jakiś czas), ale w przeszłości, dodałem DocumentListener do JTextField i na żadnej z imprez (insert, update, usunąć) I:

evt.getDocument().getLength() 

Która zwraca całkowitą długość zawartości pola tekstowego.

3

Może to być związane z tym "bug" (or rather "feature")

Słuchacze zostały poinformowane o najważniejszych wydarzeniach przed ich przetwarzanie do umożliwić słuchaczy do „kradzieży” zdarzeń przez ich spożywania. Daje to kompatybilność z ze starszym pojęciem konsumowania zdarzeń.
Zdarzenie "wpisane" nie oznacza, że ​​tekst został wprowadzony do komponentu. To NIE jest błąd , jest to zamierzone zachowanie.

Możliwym rozwiązaniem jest, aby posłuchać 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 
} 
}); 

Uwaga ta działa niezależnie od tego, w jaki sposób tekst zostanie zmieniony; poprzez cięcie/wklejanie schowka, progamatyczne "setText()" na TextField lub użytkownik wpisujący w pole w interfejsie użytkownika.

3

KeyEvent s są wydarzeniami niskiego poziomu, które nie są tutaj odpowiednie [brzmi znajomo].

W jaki sposób system JTextField wie, że wpisano znak? Poprzez wpisane kluczem zdarzenie (IIRC, wykonane za pomocą PL & F). Czy zdarzenie zostanie wysłane do odbiornika systemu przed twoim słuchaczem? To może, ale nie musi.

W tym przypadku prawdopodobnie chcesz przejść do Document i dodać detektor wyższego poziomu. W przypadku Swinga dobrym pomysłem jest wcześniejsze przejście do modelu - interfejsy klasy "J" są niespójne. Jeśli przechwytujesz dane wejściowe, prawdopodobnie potrzebujesz niestandardowego modelu (lub w przypadku Document a DocumentFilter).

2

użyć tego kodu:

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

Rozważmy rozszerza swoją odpowiedź do wyjaśnienia Pytający dlaczego ten osiąga pożądany rezultat, ewentualnie łącząc się z dokumentacją. Jest to jedynie mało przydatne. –

Powiązane problemy