En Java, ce cas est *en continu* tiré sur le bouton de la souris enfoncé?
Je voudrais savoir si il existe en Java, un événement qui est en permanence déclenché quand un bouton de la souris est maintenu enfoncé (pressé), même si la souris n'est pas déplacé. Je ne pouvais pas le trouver dans typique MouseListeners:
- MouseDragged est déclenché uniquement si l'utilisateur déplacer de la souris tout en maintenant le bouton vers le bas
- MousePressed est déclenché qu'une seule fois lorsque le bouton a été pressé
Et c'est à ce sujet.
Une idée de comment faire d'un tel événement?
Acclamations
jy
Êtes-vous sûr de ne pas dire à plusieurs reprises? Comment voulez-vous faire face à un nombre infini d'événements?
Je pensais envoyer un autre thread quelque chose à faire, et d'attendre. Lorsque le thread retourne, si le bouton est toujours sur les, le faire à nouveau.
Je pensais envoyer un autre thread quelque chose à faire, et d'attendre. Lorsque le thread retourne, si le bouton est toujours sur les, le faire à nouveau.
OriginalL'auteur Jean-Yves | 2009-12-30
Vous devez vous connecter pour publier un commentaire.
James Goodwin code ne fonctionnera pas. mousePressed et mouseReleased sont tous les deux tirés depuis le thread GUI, bloquant ainsi dans mousePressed permettra d'éviter mouseReleased de jamais de feu, sens de la boucle continuera à jamais.
Si vous avez déjà un sujet séparé pour le traitement puis utilisez mousePressed pour indiquer à ce sujet que l'événement doit commencer, et mouseReleased arrêter.
Si vous n'avez pas un thread séparé et ne veulent pas les tracas, une Minuterie est probablement le moyen le plus facile. javadoc sur Minuterie.
Plus précisément, vous devez créer un TimerTask qui fait tout ce que vous voulez faire plusieurs fois et la file d'attente à l'aide de la Minuterie.horaire:
Je suis sûr que ce est la façon la plus simple, car il n'implique pas de tourner en rond avec la communication inter-thread.
Oh, et comme Pierre l'a dit, vous devez ajouter du code pour tenir compte de l'utilisateur utilisation de la souris vers le bas sur votre application et l'utilisation de la souris quelque part d'autre.
Ce, après quelques modifications, fixe mon problème à la perfection. Merci!
OriginalL'auteur ZoFreX
Il y a une raison pour que cet événement n'est pas disponible dans MouseListener: il va vous spam avec des événements tels que tout est ralenti à l'arrêt. Voulez-vous recevoir cet événement, chaque seconde, chaque ms, ou même plus souvent? Si vous avez besoin que vous aurez à faire vous-même.
Pour stearing ce processus, bien sûr, vous devez
mousePressed
etmouseReleased
pour déterminer si un bouton est actuellement détenu. Ensuite, vous devez exécuter une sorte de boucle qui génère les événements correspondants que vous aimeriez avoir.Vous pouvez également travailler via l'interrogation, c'est à dire de prolonger votre MouseListener classe telle qu'elle peut vous dire si un bouton est pressé, et où vous avez besoin de ces évènements, vous pouvez activement sondage pour le bouton. Cela dépend de comment vous voulez utiliser ces événements, dont l'approche est plus appropriée.
OriginalL'auteur Frank
Si vous avez besoin de faire quelque chose, tandis que le bouton de la souris est en panne, il suffit de le lancer lorsque vous détectez un
mousePressed
événement et continuera à le faire jusqu'à ce que vous détecter unemouseReleased
événement. Ensuite, vous n'avez pas besoin de votre événement en continu de la cuisson. par exemple,EDIT:
Comme d'autres l'ont dit, le code devra être séparé de l'événement thread sinon, l'appel à
mouseReleased
aurait bloqué la prévention de la boucle à partir de fin.OriginalL'auteur James Goodwin
Il n'est aucun événement
Vous pouvez créer vos propres commencent par une minuterie dans le mousedown méthode et de fin de la minuterie même dans le mousereleased
Vous aurez également besoin d'un peu d'échouer enregistre assurez-vous que le chronomètre s'arrête lorsque vous ne mousedown l'movemove sur un autre composant ou même sur d'autres frame ou non java gui pièces
OriginalL'auteur Peter
Je pense que vous trouverez la réponse est non, il n'y a pas de tels cas. Pas seulement pour Java, mais pour toute la GUI cadre. Il ne servirait à rien d'autre que de la cravate de la file d'attente des événements.
Vous avez besoin pour créer votre propre par piégeage de la souris vers le bas de l'événement puis d'avoir un minuteur de déclencher des événements à intervalles réguliers jusqu'à ce que la souris jusqu'à l'événement.
OriginalL'auteur Dave Kirby