2017-09-27 3 views
2

Je construis une application en utilisant CodenameOne et je veux utiliser un TextField pour filtrer une longue liste d'éléments. J'ai essayé d'utiliser un DataChangedListener, comme proposé dans https://www.codenameone.com/javadoc/com/codename1/ui/TextField.html, mais cela ne déclenchera un événement qu'une fois que l'utilisateur a terminé l'édition (c'est-à-dire appuie sur la touche "Entrée"). Comment puis-je obtenir un événement pour chaque caractère modifié dans le champ de texte?Comment obtenir un événement pour chaque changement dans un CodenameOne TextField

Répondre

3

DataChangedListener se déclenche pour chaque entrée de touche et non lorsque la touche Enter est enfoncée (c'est pour actionListener).

private String filterString = ""; 

... 


filterTextField.addDataChangedListener((evt1, evt2) -> { 
    if (filterTextField.getText().trim().length() > 0 && !filterString.equalsIgnoreCase(filterTextField.getText().trim())) { 
     //perform your filter here 
     //revalidate your form 
    } 
    filterString = filterTextField.getText().trim(); 
}); 
+0

Bonjour diamant, vous avez raison. L'événement s'est déclenché à chaque pression sur la touche, mais mon filtre n'a fonctionné correctement qu'une fois l'édition terminée car j'ai oublié de revalider/repeindre la liste. Merci, Frans. –

+0

Vous pourriez upvote ceci et Mark comme réponse. – Diamond