2010-03-23 14 views
3

Donc, je travaille avec swing et j'ai besoin de trouver un nettoyage (non-CPU-hogging-way) pour introduire un retard sur un champ de texte. Fondamentalement, les utilisateurs entreront un nombre dans ce champ et l'événement keyReleased() vérifie que l'entrée s'adapte à quelques paramètres, puis affecte la valeur à un élément de stockage de données dans le programme. Si les données ne sont pas valides, elles affichent un message. Puisque la routine est appelée à chaque fois qu'ils tapent une lettre (à moins qu'ils ne tapent TRÈS vite), le processus d'entrée devient assez ennuyeux (comme en général un ou deux caractères de données ne vont pas correspondre aux paramètres autorisés).Introduire Delay après l'événement keyReleased()

J'ai essayé de configurer un objet timer et une tâche timer, mais cela ne semble pas très bien fonctionner (car cela retarde le thread sur lequel tourne le programme). L'option d'attendre juste que les données atteignent une certaine longueur n'est également pas possible puisque (comme état avant) l'entrée peut varier en longueur.

Quelqu'un a-t-il des idées? Merci!

Répondre

4

J'ai fait des choses comme ça assez souvent, et j'ai deux suggestions.

La façon standard de gérer cela est d'utiliser la classe InputVerifier. Cela ne fonctionne cependant que lorsque le composant d'entrée perd le focus - il est conçu pour empêcher l'utilisateur de sortir d'un champ de saisie lorsqu'il n'est pas valide, mais il ne vérifie pas avant. L'autre manière que j'ai fait ceci est de vérifier la validité sur chaque frappe, mais ne pas faire apparaître un message quand il n'est pas valide. Au lieu de cela, utilisez une couleur pour indiquer la validité - par ex. colorez-la en rouge quand elle est invalide et noire lorsqu'elle est valide. Ce n'est pas aussi intrusif que le message. Vous pouvez utiliser une info-bulle pour donner des informations plus détaillées.

Vous pouvez également combiner ces méthodes.

+0

Faire une validation qui avertit l'utilisateur d'une erreur de défocalisation est définitivement ma méthode préférée. +1 pour ça. – aperkins