Bonjour,

J'essaie de faire bouger une icone avec setLocation tout en la changeant pour une autre, mais quand j'appuie sur la flèche droite du clavier, elle revient toujours à sa position d'origine. Par contre, si je ne mets pas le setIcon, ça fonctionne. Voici mon 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
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
 
package help;
 
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.ImageIcon;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
 
/**
 *
 * @author Roud
 */
public class Help
{
 
    JFrame frame = new JFrame();
    ImageIcon pacman = new ImageIcon("ImagesPacman\\pacman1.png");
    ImageIcon pacman6 = new ImageIcon("ImagesPacman\\pacman6.png");
    JLabel label = new JLabel(pacman);
    JLabel label2 = new JLabel(new ImageIcon("ImagesPacman\\pacman6.png"));
    JLabel temp;
    boolean test = true;
 
    public Help()
    {
        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        frame.setSize(800, 600);
        frame.setLayout(new GridLayout());
        frame.add(label);
        label.setPreferredSize(new Dimension(100, 100));
        label.setLocation(400, 300);
 
        frame.getContentPane().validate();
        frame.repaint();
        frame.setVisible(true);
 
        mysterious();
    }
 
    void mysterious()
    {
        Thread t = new Thread(new Runnable()
        {
            @Override
            public void run()
            {
                frame.addKeyListener(
                        new KeyListener()
                        {
                            @Override
                            public void keyPressed(KeyEvent ke)
                            {
                                int code = ke.getKeyCode();
                                if (code == KeyEvent.VK_LEFT)
                                {
                                    label.setLocation((label.getX() - 1), label.getY());
                                    System.out.println("x = " + label.getX());
                                    System.out.println("y = " + label.getY());
                                }
                                else if (code == KeyEvent.VK_RIGHT)
                                {
                                    if (!test) // C'est là que ça fonctionne pas
                                    {
                                        label.setIcon(pacman6);
                                        test = true;
                                    }
                                    else // et ici
                                    {
                                        label.setIcon(pacman);
                                        test = false;
                                    }
                                 // l'image revient à (400,300), soit sa position d'origine
                                    label.setLocation((label.getX() + 1), label.getY()); 
 
                                    System.out.println("x = " + label.getX());
                                    System.out.println("y = " + label.getY());
 
 
                                }
                                else if (code == KeyEvent.VK_UP)
                                {
                                    label.setLocation((label.getX()), label.getY() - 1);
                                }
                                else if (code == KeyEvent.VK_DOWN)
                                {
                                    label.setLocation((label.getX()), label.getY() + 1);
                                }
                            }
                        );
            }
        });
        t.start();
    }
 
    public static void main(String[] args)
    {
        new Help();
    }
}
Je ne comprends pas pourquoi quand je fais setIcon et setLocation par la suite, le x et le y se situent à la position originale.

Merci