Comment créer un retard dans le Swing
J'ai fait un jeu de blackjack, et je veux que le joueur AI de pause entre la prise des cartes. J'ai essayé tout simplement à l'aide de Fil.sommeil(x), mais qui en fait congeler jusqu'à ce que le joueur AI est fait en prenant toutes ses cartes. Je sais que le Swing n'est pas thread-safe, alors j'ai regardé, Minuteries, mais je ne pouvais pas comprendre comment je pouvais l'utiliser pour cette. Voici mon code actuel:
while (JB.total < 21) {
try {
Thread.sleep(1000);
} catch (InterruptedException ex) {
System.out.println("Oh noes!");
}
switch (getJBTable(JB.total, JB.aces > 0)) {
case 0:
JB.hit();
break;
case 1:
break done;
case 2:
JB.hit();
JB.bet *= 2;
break done;
}
}
BTW, le hit(); la méthode des mises à jour de l'interface graphique.
OriginalL'auteur Fractaly | 2011-08-31
Vous devez vous connecter pour publier un commentaire.
Ainsi, le code suivant montre une JFrame avec un JTextArea et un JButton. Lorsque les boutons est cliqué, la Minuterie d'envoyer l'événement à plusieurs reprises (avec une seconde de retard entre eux) à l'actionListener liées au bouton qui ajoute une ligne à l'heure actuelle.
Bien, ce code est un exemple de comment utiliser javax.swig.Minuterie objets. En relation avec le cas particulier de la question. Si l'instruction à l'arrêt de la minuterie doit changer, et, évidemment, les actions de la actionPerformed. Le fragment suivant est le squelette de la solution actionPerformed:
À mon humble avis cela résout le problème, maintenant, @user920769 devez penser à où mettre la actionListener et le démarrage/arrêt de conditions...
@kleopatra: Merci de me montrer l'existence de cette classe timer, je ne sais rien à ce sujet et c'est incroyable, rendre possible un lot de chargée des choses dans une application swing 🙂
Ne vous importez la classe Timer? Les méthodes ne sont pas obsolètes, même dans la dernière version, donc il semble que votre erreur. Ici le Java7 ApiDoc
OriginalL'auteur Charliemops
La Minuterie est la solution, puisque comme vous le dites vous êtes à la mise à jour de l'interface graphique qui doit être fait sur l'EDT.
Je ne suis pas sûr de ce que votre préoccupation est. Distribuer une carte et démarrer le Minuteur. Lorsque le compte à rebours incendies de vous décider à prendre une autre carte ou maintenez-la enfoncée. Lorsque vous tenez votre arrêt de la Minuterie.
à voir (et à lire 😉 l'erreur à nouveau, essayez de nouveau
OriginalL'auteur camickr
Bien, une explication rapide sur les Minuteurs.
Tout d'abord, vous avez besoin d'un java.util.Minuterie variable dans votre classe et une autre classe dans votre projet, qui s'étend à partir de java.util.TimerTask (appelons-Tasker).
L'initialisation de la Minuterie variable est si facile:
Maintenant la Tasker classe:
Enfin, l'installation de la minuterie avec ses Tasker:
La fonction planning indique les informations suivantes:
Le premier param: Action de faire chaque période de millisecondes () Exécute la fonction d'exécution d'un TimerTask de classe ou de son extension)
Deuxième paramètre: Lorsque la minuterie doit démarrer. Dans ce cas, il commence lorsque le calendrier de la fonction est appelée. L'exemple suivant indique un départ 1 seconde après l'appel de la fonction planning:
timer.schedule(new Tasker(),1000,period);
Troisième paramètre: (en millisecondes) entre un appel de Tasker.fonction run() et l'appel suivant.
J'espère que vous comprenez ce microtutorial :). Si vous avez un problème, demandez pour de plus amples informations!
Salutations!
tête) DYM un
javax.swing.Timer
? Ne peux pas dire que j'ai rencontré l'autre.Bien, j'ai mis le code avec l'util.Minuterie raison est que j'ai utilisé dans un projet il y a un an. Mon projet est un jeu de volley et nous utilisons la structure ci-dessus pour recalculer l'information et de rafraîchissement de la fenêtre à chaque 0,04 secondes. Je ne sais pas comment utiliser swingx.Timer, mais ce code fonctionne correctement dans les applications graphiques. Il ne gèle pas la fenêtre et de permettre à l'utilisateur de faire des choses sans aucun problème. =)
désolé pour la confusion, de ma faute (coupable de subconscient à l'étroitesse d'esprit 😉 - @Andrew l'aurez deviné, je voulais dire javax.swing.La minuterie et le java.util.Minuterie
Eh bien, j'ai lu le swing.Minuterie d'API et j'ai fait un code avec une Minuterie qui pourrait aider @user920769. En raison de l'extension de la réponse, je l'ai mis dans une nouvelle réponse. Je n'ai pas modifier celui-ci car, même si elle n'est pas la meilleure façon, l'util.La minuterie fait le tour facilement.
OriginalL'auteur Charliemops
Je pense que dans ce tutoriel est clair comment utiliser les Minuteries afin d'obtenir ce que vous voulez, sans avoir à traiter avec les Threads.
OriginalL'auteur Luismahou