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

Fermé
zzzer Messages postés 907 Date d'inscription dimanche 25 mai 2008 Statut Membre Dernière intervention 3 décembre 2023 - 18 déc. 2009 à 17:24
zzzer Messages postés 907 Date d'inscription dimanche 25 mai 2008 Statut Membre Dernière intervention 3 décembre 2023 - 21 déc. 2009 à 12:48
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 :
public void mouseDragged(MouseEvent e) {
        Component source = (Component) e.getSource(); // mon JLabel, donc
        Point fLocation = f.getLocation(); // location de la frame sur l'écran
        int xos = e.getXOnScreen();
        int yos = e.getYOnScreen();
        source.setLocation(xos - fLocation.x - 4 + e.getX(),
                           yos - fLocation.y - 24 + e.getY()); // 4 et 24 sont la différence entre la frame et le JPanel
        dp.repaint(); // apparemment inutile
    }



Quelqu'un a une idée ?

Merci d'avance !

A voir également:

2 réponses

zzzer Messages postés 907 Date d'inscription dimanche 25 mai 2008 Statut Membre Dernière intervention 3 décembre 2023 181
18 déc. 2009 à 22:35
up!
0
zzzer Messages postés 907 Date d'inscription dimanche 25 mai 2008 Statut Membre Dernière intervention 3 décembre 2023 181
21 déc. 2009 à 12:48
Problème résolu avec :
class DragHandler extends MouseAdapter{
//We save the "press" point in "mousePressed", so we can translate the
//source location in "mouseDragged" relatively to the "press" point:
    private Point press;
    @Override
    public void mousePressed(final MouseEvent e) {
        press = e.getPoint();
    }
    @Override
    public void mouseDragged(final MouseEvent e) {
        Component source = (Component) e.getSource();
        Point location = source.getLocation();
        location.translate(e.getX() - press.x, e.getY() - press.y);
        source.setLocation(location);
    }
}


0