Bonjour,
J'ai besoin de votre aide pour comprendre le fonctionnement de Java dans le code qui va suivre. Il s'agit en fait d'une animation qui se lance au démarrage du programme. Deux boutons sont là pour arrêter l'animation pour le premier et pour relancer l'animation pour le deuxième bouton.
Au clic sur le bouton "Stopper" l'animation s'arrête, mais ensuite, en cliquant sur le bouton "Go", l'animation n'est pas relancée. Il semble que c'est à cause de la boucle infinie mais j'arrive pas à comprendre pourquoi d'autant plus que le programme, au lancement, se trouve bien dans une boucle infinie, mais arrive quand même à fonctionner (animation qui tourne). Quelqu'un aurait-il plus d'explications sur ce "dysfonctionnement".
Merci d'avance.
Ci-dessous le code :
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91 import java.awt.BorderLayout; import java.awt.Color; import java.awt.Font; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; public class Fenetre extends JFrame{ private Panneau pan = new Panneau(); private JButton bouton = new JButton("Go"); private JButton bouton2 = new JButton("Stop"); private JPanel container = new JPanel(); private JLabel label = new JLabel("Le JLabel"); private int compteur = 0; private boolean animated = true; private boolean backX, backY; private int x, y; public Fenetre(){ this.setTitle("Animation"); this.setSize(300, 300); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setLocationRelativeTo(null); container.setBackground(Color.white); container.setLayout(new BorderLayout()); container.add(pan, BorderLayout.CENTER); bouton.addActionListener(new BoutonListener()); bouton.setEnabled(false); bouton2.addActionListener(new Bouton2Listener()); JPanel south = new JPanel(); south.add(bouton); south.add(bouton2); container.add(south, BorderLayout.SOUTH); Font police = new Font("Tahoma", Font.BOLD, 16); label.setFont(police); label.setForeground(Color.blue); label.setHorizontalAlignment(JLabel.CENTER); container.add(label, BorderLayout.NORTH); this.setContentPane(container); this.setVisible(true); go(); } private void go(){ //Les coordonnées de départ de notre rond x = pan.getPosX(); y = pan.getPosY(); //Dans cet exemple, j'utilise une boucle while //Vous verrez qu'elle fonctionne très bien while(this.animated){ if(x < 1)backX = false; if(x > pan.getWidth()-50)backX = true; if(y < 1)backY = false; if(y > pan.getHeight()-50)backY = true; if(!backX)pan.setPosX(++x); else pan.setPosX(--x); if(!backY) pan.setPosY(++y); else pan.setPosY(--y); pan.repaint(); try { Thread.sleep(3); } catch (InterruptedException e) { e.printStackTrace(); } } } class BoutonListener implements ActionListener{ public void actionPerformed(ActionEvent arg0) { animated = true; bouton.setEnabled(false); bouton2.setEnabled(true); go(); } } class Bouton2Listener implements ActionListener{ public void actionPerformed(ActionEvent e) { animated = false; bouton.setEnabled(true); bouton2.setEnabled(false); } } }
Partager