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
classe Bouton
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 GestionEvenement
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; } }
Quelqu'un as-t'il déjà eu le problème ?
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(); } }
Partager