[Java Swing] Problème avec drag'n'drop

Problème avec drag'n'drop [Java Swing] - Java - Programmation

Marsh Posté le 19-12-2009 à 16:11:52    

Bonjour,
 
J'essaye de faire un petit test de drag'n'drop d'un JLabel sur un JPanel.
J'ai donc ajouté un MouseMotionListener à mon JLabel, mais lorsque je déplace ce dernier, bizarrement, une seule image sur deux du JLabel est bonne au niveau des coordonnées (l'autre se trouve en bas à droite).
 
Voici les positions successives de mon JLabel lorsque je le bouge :
java.awt.Point[x=450,y=394]
java.awt.Point[x=250,y=248]
java.awt.Point[x=428,y=370]
java.awt.Point[x=236,y=230]
java.awt.Point[x=414,y=358]
java.awt.Point[x=224,y=220]
 
Je ne vois pourtant pas ce qui cloche dans mon mouseDragged :
 

Code :
  1. public void mouseDragged(MouseEvent e) {
  2.         Component source = (Component) e.getSource(); // mon JLabel, donc
  3.         Point fLocation = f.getLocation(); // location de la frame sur l'écran
  4.         int xos = e.getXOnScreen();
  5.         int yos = e.getYOnScreen();
  6.         source.setLocation(xos - fLocation.x - 4 + e.getX(),
  7.                            yos - fLocation.y - 24 + e.getY()); // 4 et 24 représentent la différence de coordonnées entre la frame et le JPanel
  8.         dp.repaint(); // apparemment inutile
  9. }


 
 
 
 
Quelqu'un a une idée ?
 
Merci d'avance ! ;)

Reply

Marsh Posté le 19-12-2009 à 16:11:52   

Reply

Marsh Posté le 20-12-2009 à 03:25:57    

Pourquoi pas juste:
 

Code :
  1. source.setLocation(e.getX(), e.getY());


 
?

Reply

Marsh Posté le 20-12-2009 à 11:46:56    

cbeyls a écrit :

Pourquoi pas juste:
 

Code :
  1. source.setLocation(e.getX(), e.getY());


 
?


 
Non, car je veux en fait tenir compte de l'endroit du JLabel où l'utilisateur a cliqué.
Par exemple, s'il clique dans le quart inférieur droit du JLabel, le comportement ne devra pas être le même que s'il clique dans le quart supérieur gauche, car setLocation() positionne l'élément avec son coin supérieur gauche...

Reply

Marsh Posté le 20-12-2009 à 21:17:52    

D'accord, tu devrais donc mesurer le décalage entre le bord du JLabel et le curseur au moment où tu enfonces le bouton et l'additionner à chaque fois.

Reply

Marsh Posté le 20-12-2009 à 23:05:53    

cbeyls a écrit :

D'accord, tu devrais donc mesurer le décalage entre le bord du JLabel et le curseur au moment où tu enfonces le bouton et l'additionner à chaque fois.


 
Cette différence est justement représentée par e.getX() et e.getY().
Ce qui marche à moitié, car une image sur deux est juste...

Reply

Marsh Posté le 21-12-2009 à 12:46:52    

Problème résolu grâce à

Code :
  1. class DragHandler extends MouseAdapter{
  2. //We save the "press" point in "mousePressed", so we can translate the
  3. //source location in "mouseDragged" relatively to the "press" point:
  4.     private Point press;
  5.     @Override
  6.     public void mousePressed(final MouseEvent e) {
  7.         press = e.getPoint();
  8.     }
  9.     @Override
  10.     public void mouseDragged(final MouseEvent e) {
  11.         Component source = (Component) e.getSource();
  12.         Point location = source.getLocation();
  13.         location.translate(e.getX() - press.x, e.getY() - press.y);
  14.         source.setLocation(location);
  15.     }
  16. }


Merci à uhrand!

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed