IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 Java Discussion :

Rafraichir régulièrement un dessin après un évènement : avec Timer et pas Thread.sleep


Sujet :

Java

Mode arborescent

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut Rafraichir régulièrement un dessin après un évènement : avec Timer et pas Thread.sleep
    Bonjour,

    J'ai un dessin (Graphics) qui doit se rafraichir à intervalles réguliers (environ une fois par seconde). Le rafraichissement se déroule bien lorsqu'il est demandé par le programme principal. Mais lorsqu'il est demandé par un évènement (clic de bouton), seul le résultat final est affiché, et pas les dessins intermédiaires.

    J'utilise la fonction Thread.sleep pour séparer deux affichages.

    J'ai essayé de réduire au minimum mon code tout en laissant le problème apparant ... du coup il n'est pas "joli", mais il est court.

    Ce code dessine un carré noir alternativement à gauche puis à droite de la fenêtre (cinq fois). Ensuite il y a un bouton qui permet de relancer le dessin du carré noir alternativement des deux côtés (pour cinq dessins).

    Lorsqu'on lance le programme, les cinq premiers dessins sont bien affichés car ils n'ont pas été demandés par un clique de bouton. Ensuite lorsqu'on clic sur le bouton, rien ne se passe, et au bout des cinq itérations, le dessin final est affiché.

    Voici le code :

    imports
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;

    classe Fenetre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    public class Fenetre extends JFrame {
      int x = 0;
     
      public static void main(String[] args) {
        new Fenetre();
      }
     
      Fenetre() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setSize(200, 150);
     
        Bouton avancerCinqFois = new Bouton(this);
        avancerCinqFois.addActionListener(new GestionEvenement());
        add(avancerCinqFois, BorderLayout.SOUTH);
     
        setVisible(true);
     
        avancerCinqFois();
      }
     
      void avancerUneFois() {
        x = (x+100) % 200;
        repaint();
      }
     
      void avancerCinqFois() {
        for (int i = 0; i < 5; ++i) {
          avancerUneFois();
          try {Thread.sleep(500);}
          catch (InterruptedException e) { }
        }
      }
     
      public void paint(Graphics g) {
        g.setColor(Color.white);
        g.fillRect(0, 0, 200, 100);
        g.setColor(Color.black);
        g.fillRect(x, 0, 100, 100);
      }
    }
    classe Bouton
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    class Bouton extends JButton {
      Fenetre fenetre;
     
      Bouton(Fenetre fenetre) {
        super("avancer 5 fois");
        this.fenetre = fenetre;
      }
    }
    classe GestionEvenement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    class GestionEvenement implements ActionListener {
      public void actionPerformed(ActionEvent evenement) {
        Bouton bouton = (Bouton)evenement.getSource();
        bouton.fenetre.avancerCinqFois();
      }
    }
    Quelqu'un as-t'il déjà eu le problème ?
    Dernière modification par Invité ; 03/03/2010 à 09h00. Motif: mettre la solution dans le titre

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Gestions évènements avec souris - Dessiner avec souris
    Par CosaNostra dans le forum Débuter
    Réponses: 10
    Dernier message: 23/01/2010, 10h05
  2. JButton avec boucle while contenant thread.sleep(1000)
    Par v4np13 dans le forum AWT/Swing
    Réponses: 1
    Dernier message: 17/10/2007, 20h31
  3. update d'après 2 tables avec ordre de date
    Par fred23195 dans le forum Langage SQL
    Réponses: 1
    Dernier message: 22/12/2005, 17h39
  4. Réponses: 1
    Dernier message: 21/10/2005, 13h08
  5. Rafraichir une iframe 1 après modification d'une iframe2
    Par MASSAKA dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 12/10/2005, 11h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo