Bonjour à tous,

j'ai créé une "ContentPane" dans ma classe "MyWindow", intégrant 4 images, que je souhaite déplacer à la souris.
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'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
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
 
	}
J'associe mon "ecouteur" à mes images pendant leur construction.

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 :
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.");
devrait se vérifier et m'afficher que l'on bouge bien sur l'image1.
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....