Le code de James Goodwin ne fonctionnera pas.mousePressed et mouseReleased sont tous les deux lancés à partir du thread de l'interface graphique, donc un blocage dans mousePressed empêchera mouseReleased de se déclencher, ce qui signifie que la boucle continuera indéfiniment.
Si vous avez déjà un thread séparé à traiter, utilisez mousePressed pour indiquer à ce thread que l'événement doit démarrer et mouseReleased pour arrêter.
Si vous n'avez pas de fil séparé et que vous ne voulez pas de soucis, une minuterie est probablement le moyen le plus simple. javadoc on Timer.
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 Timer.schedule:
Timer timer = new Timer();
TimerTask task = new MyTimerTask();
private class MyTimerTask extends TimerTask {
public void run() {
// your code here
}
}
public void mousePressed(MouseEvent e) {
timer.scheduleAtFixedRate(task, 0, 1000); // Time is in milliseconds
// The second parameter is delay before the first run
// The third is how often to run it
}
public void mouseReleased(MouseEvent e) {
task.cancel();
// Will not stop execution of task.run() if it is midway
// But will guarantee that after this call it runs no more than one more time
}
Je suis assez sûr que ce soit la façon la plus simple, comme n'implique pas de faffing avec la communication inter-thread. Oh, et comme Peter l'a dit, vous devrez ajouter du code pour rendre compte à l'utilisateur de la souris sur votre application et de la souris ailleurs.
Etes-vous sûr de ne pas vouloir dire à plusieurs reprises? Comment feriez-vous face à un nombre infini d'événements? – robertc
Je pensais envoyer un autre fil à faire et attendre. Lorsque le fil revient, si le bouton est toujours activé, recommencez. –