Bonjour à tous,
j'ai créé une "ContentPane" dans ma classe "MyWindow", intégrant 4 images, que je souhaite déplacer à la souris.
J'ai réalisé un "écouteur", par l'intermédiaire de la classe "MyListener".
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 import java.awt.Color; import java.awt.Point; import javax.swing.JFrame; import javax.swing.JLabel; @SuppressWarnings("serial") public class MyWindow extends JFrame { // MES VARIABLES int x,y; JLabel pan2 = new JLabel(); Point p = new Point (); // coordonées x et y nommées p.x et p.y static PanListener ecouteur = new PanListener(); static JLabel image1, image2, image3, image4 ; //EcouteSouris ecoute1 = new EcouteSouris(); public MyWindow (String string) { // mon constructeur de fenetre /* la fenetre est : * toujours visible, au premier plan, * de taille 500x500, * se ferme quand on clique sur la croix, * sont centrées sur l'écran. */ super (); this.setTitle(string); this.isAlwaysOnTop(); this.setSize(500, 500); this.setLocationRelativeTo(null); this.setDefaultCloseOperation(DISPOSE_ON_CLOSE); this.setVisible(true); // on créé un "pan2" de type ContenPane , sans organisation de dépot d'objet. // CONSTRUCTEUR PAN2 pan2.setBackground(Color.gray); pan2.setLayout(null); this.setContentPane(pan2); /* pour chaque valeur de i (chaque image), on * - charge l'image grâce à la fonction "afficheTete()" * - met une localisation x et y * - met l'image au format 150x150 * - on affiche l'image sur le "pan" * -on affiche le suivi sur la console */ for (int i = 1; i<5; i++) { JLabel image = (ChargeTete.affiche(i) ); x = 150 * i; y = 150*i ; image.setName("image"+i); image.setLocation(x, y); image.setSize(150,150); image.addMouseMotionListener( ecouteur); image.addMouseListener(ecouteur); pan2.add(image ); System.out.println("nom de l'image : " + image.getName() ); System.out.println("x voulu" + i + " = " + x ); System.out.println("y voulu" + i + " = " + y ); System.out.println(image.getLocation(p)+ "\n"); System.out.println(pan2.getLayout() + "\n"); } // on repeint le panneau pour tout afficher. pan2.repaint();
J'associe mon "ecouteur" à mes images pendant leur construction.
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 import java.awt.Color; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.event.MouseMotionListener; import javax.swing.JPanel; @SuppressWarnings("serial") public class PanListener implements MouseListener, MouseMotionListener { boolean b1 = false ; int x1, y1; @Override public void mouseDragged(MouseEvent e) { // TODO Auto-generated method stub } @Override public void mouseMoved(MouseEvent e) { System.out.println("j'ai bougé la souris....."); int newX, newY ; if (e.getComponent() == MyWindow.image1) { System.out.println("j'ai bougé image 1."); int x2 = e.getX(); int y2 = e.getY(); if (b1 && (x2!= x1) && (y2!=y1)) { int dx = x2-x1; int dy = y2-y1; newX = MyWindow.image1.getX() + dx ; newY = MyWindow.image1.getY() + dy ; MyWindow.image1.setLocation(newX, newY); x1 = x2; y1 = y2; } } else { System.out.println("pas image 1."); } } @Override public void mouseClicked(MouseEvent e) { System.out.println("j'ai cliqué et relaché la souris....."); } @Override public void mousePressed(MouseEvent e) { System.out.println("j'ai cliqué sur la souris....."); b1 = true ; x1 = e.getX() ; y1 = e.getY(); } @Override public void mouseReleased(MouseEvent e) { System.out.println("j'ai rélaché la souris....."); b1 = false ; } @Override public void mouseEntered(MouseEvent e) { // TODO Auto-generated method stub } @Override public void mouseExited(MouseEvent e) { // TODO Auto-generated method stub }
Quand je déplace la souris sur une image ( entre 1 et 4) la console affiche bien le message qui indique que la souris bouge sur l'image écoutée.
Cependant, quand je bouge le souris sur l'image1, la comparaison :
devrait se vérifier et m'afficher que l'on bouge bien sur l'image1.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 @Override public void mouseMoved(MouseEvent e) { System.out.println("j'ai bougé la souris....."); int newX, newY ; if (e.getComponent() == MyWindow.image1) { System.out.println("j'ai bougé image 1.");
Cela ne semble pas être vu.
j'ai essayé if (e.getSource()............ et if(e.getComponent()........
La syntaxe est-elle correcte ou y-a-t-il un élément qui m'échappe?
Merci à tous ceux qui se pencheront sur mon code....
Partager