Pour connaisseur des évements "MouseEvent"
Bonjour à tous,
j'ai créé une "ContentPane" dans ma classe "MyWindow", intégrant 4 images, que je souhaite déplacer à la souris.
Code:
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:
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:
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....