Comment puis-je savoir quand le texte éditable JComboBox a été changé?
J'ai un modifiable JComboBox où j'ai envie de prendre un peu d'action à chaque fois que le texte est modifié, soit par saisie ou la sélection. Dans ce cas, le texte est un modèle et je veux vérifier que le modèle est valide et des matchs qui entraînent des données de test.
Avoir fait évident, joindre une ActionHandler, j'ai trouvé que, pour la saisie, l'événement semble à feu mal, au mieux (la sélection est très bien). Et quand il ne feu comme un résultat de la saisie, le texte récupéré (à l'aide de getEditor().getItem(), puisque getSelectedItem() n'obtient que le texte quand il a été sélectionné dans la liste) semble être le texte tel qu'il était lors de la dernière épreuve a été licencié, c'est toujours manquant le caractère a été tapé immédiatement avant l'action de l'événement a été déclenché.
Je m'attendais à l'événement d'action pour le feu après un certain délai court (500 ms à 1 seconde), mais il semble immédiatement ouvert le feu sur l'incrustation (s'il est utilisé à tous).
La seule alternative possible, je peux penser à est de simplement commencer une 1 seconde minuterie sur focus-gagné, le tuant sur l'objet-perdu et de faire le travail que la minuterie d'action si le contenu est différent de la dernière fois.
Des idées ou des suggestions?
Les extraits de code ne sont pas particulièrement intéressants:
find.addActionListener(this);
...
public void actionPerformed(ActionEvent evt) {
System.out.println("Find: "+find.getEditor().getItem());
}
Vous devez vous connecter pour publier un commentaire.
L'action de l'auditeur est généralement déclenché lorsque vous appuyez sur entrée, ou de déplacer le focus à partir de l'éditeur de la liste déroulante. La façon correcte d'intercepter les modifications individuelles de l'éditeur est d'enregistrer un document auditeur:
La DocumentListener interface a des méthodes qui sont appelées à chaque fois que le Document support de l'éditeur est modifié (insertUpdate, removeUpdate, changeUpdate).
Vous pouvez également utiliser une classe anonyme pour un contrôle plus précis de l'endroit où les événements sont à venir à partir de:
Document
comme un champ dans la classe parent (en se référant àtc.getDocument()
). Puis, dans les modifications/supprimer/insérer des méthodes de mise à jour de laDocumentListener
, leDocumentEvent.getDocument()
méthode retourne leDocument
qui est liée à laJComboBox
. Vrai, vous pourriez avoir besoin d'un peu de logique supplémentaire pour garder une trace du fait que les deux objets sont associés les uns avec les autres.Vous pouvez utiliser quelque chose comme ceci:
cela sonne comme la meilleure solution