Bonjour,
Je suis étudiant en informatique L2, cette année j'ai appris à coder en java mais on a (presque) pas fait d'interface graphique, j'ai donc commencé à apprendre via open classroom comment en faire. Et je me trouve face à un problème que je ne comprends pas: j'ai un Jpanel panneau (juste un rond avec des geteurs et des setteurs sur ses coordonnées en x et y. Ma fenetre est composée de ce Jpanel et d'un bouton. J'ai aussi une fonction go() qui est sensée faire bouger mon rond en modifiant ses coordonnées avec thread.sleep pour donner l'impression de mouvement. En fait le problème c'est que je lance la fonction go() de 2 façons, une fois automatiquement dans mon main (et la tout se passe comme je le voudrais) et une autre fois dés que j’appuie sur mon bouton et le problème est la: quand j'appelle la fonction grace à mon bouton il n'y a pas de déplacement, mon rond se téléporte directement à sa position finale mais il ne se redessine pas au fur et à mesure (il y a quand meme un petit temps de latence du coup je suppose que la boucle et le thread.sleep s'exécutent bien mais je ne comprends pas pourquoi la meme fonction à un comportement différent en fonction de comment je la lance. Des idées ?
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 import java.awt.BorderLayout; import java.awt.Color; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; public class Fenetre extends JFrame{ private Panneau pan = new Panneau(); private JPanel container = new JPanel(); public Fenetre(){ this.setTitle("Animation"); this.setSize(300, 300); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setLocationRelativeTo(null); container.setBackground(Color.white); JButton bouton = new JButton("mon bouton"); bouton.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent event){ go(); } }); container.setLayout(new BorderLayout()); container.add(pan, BorderLayout.CENTER); container.add(bouton, BorderLayout.SOUTH); this.setContentPane(container); this.setVisible(true); } private void go(){ for(int i=0; i<100;i++){ pan.setPosX(pan.getPosX()+1); pan.setPosY(pan.getPosY()+1); pan.repaint(); try { Thread.sleep(3); } catch (InterruptedException e) { e.printStackTrace(); } } } public static void main (String[] args){ Fenetre f = new Fenetre(); f.go(); } }
Partager