comment utiliser un swing minuterie pour démarrer/arrêter l'animation
Quelqu'un pourrait-il m'apprendre à utiliser un swing timer
avec le but suivant:
J'ai besoin d'avoir un polygone qui commence à être animé(animation simple comme la rotation) quand je clique sur la souris; et s'arrête l'animation lorsque je clique sur nouveau.
Je n'ai pas de problèmes de compréhension de la façon dont le MouseListener
fonctionne, mais avec l'animation. J'ai essayé de simuler l'animation avec un tout en bloc à l'intérieur de la paint()
méthode où je voudrais dessiner, effacer et redessiner le polygone(pour simuler une rotation par exemple), mais à l'intérieur de la alors que, l'applet ne serait pas écouter les clics. Il serait à l'écoute seulement après le temps. J'aurais besoin de le swing timer pour casser le tout lorsque je clique sur la souris.
OriginalL'auteur biggdman | 2011-11-10
Vous devez vous connecter pour publier un commentaire.
Ajouter un attribut;
Ajoutez le code suivant à l'image du constructeur.
Remplacer
paint(Graphics g)
et tracer un polygone à partir des données qui a été modifié paractionPerformed(e)
.Enfin, un bouton de démarrage/arrêt de l'animation a le code suivant dans son gestionnaire d'événements.
Le constructeur d'une classe est une méthode qui a le même nom que la classe. Par exemple, la classe
public MyFrame extends javax.swing.JFrame
apublic MyFrame() { ... }
que son constructeur. Le constructeur sera appelé lorsque nous créons l'objet à l'aidenew
mot-clé. Par exemple, une image de l'objet peut être créé à l'aide de cette commandeMyFrame f = new MyFrame();
Ok, je comprends, mais je ne vois pas où dois-je disposer d'une image de constructeur dans une classe qui étend la classe de l'applet java. J'ai ajouté la nouvelle minuterie à la méthode init (), mais elle ne semble pas fonctionner à droite. L'applet responsables de clics, mais il semble que le polygone de données n'a pas changée.
Si vous utilisez l'Applet, vous pouvez mettre le code
timer = new Timer...
dans leinit()
méthode. Pas besoin de créer un constructeur. BTW, avez-vous surdéfinipublic void paint( Graphics g )
de peindre le polygone?J'ai mis le code timer = new Timer... dans la méthode init (). Dans la méthode de peinture j'ai quelque chose comme si coordonates du clic de la souris sont sur le polygone puis{ timer.start(); drawPolygon;}. Est-ce ok si je mets la minuterie.start() dans la peinture() la méthode?
OriginalL'auteur wannik
Ce exemple contrôle un
javax.swing.Timer
à l'aide d'un bouton, tandis que cette exemple répond à un clic de souris. Le dernier exemple, change de direction à chaque clic, mais start/stop est une simple modification.OriginalL'auteur trashgod
L'applet de ne pas écouter les clics parce que le thread principal (Event Dispatch Thread, HAE) est à l'intérieur de la alors que en boucle et n'est pas à l'écoute de vos clics.
Vous avez besoin d'un autre thread.
(essayez d'utiliser SwingWorker http://download.oracle.com/javase/tutorial/uiswing/concurrency/worker.html)
Donc, le SwingWorker va faire le tout-boucle à l'arrière-plan, la publication des résultats pour faire de votre polygone déplacer.
Et l'EDT peut alors se concentrer sur tous les événements (comme les clics). Ensuite, vous pouvez simplement utiliser le clic-event pour tuer le SwingWorker si vous voulez l'arrêter.
Bonne chance
OriginalL'auteur 00jt