Déplacement de paneau avec souris dans un Frame

Fermé
JOCK7 Messages postés 8 Date d'inscription dimanche 4 janvier 2015 Statut Membre Dernière intervention 18 janvier 2015 - 17 janv. 2015 à 18:32
JOCK7 Messages postés 8 Date d'inscription dimanche 4 janvier 2015 Statut Membre Dernière intervention 18 janvier 2015 - 18 janv. 2015 à 15:00
Salut,
J'instancie un objet de type JPanel (Pan1) que j'ajoute dans un autre JPanel (Pan2). Je mets Pan1 en écoute dans Pan2. Lorsque la souris est déplacée (via la méthode mouseDragged(...)) je déplace le panneau Pan1 selon les coordonnées de déplacement de Pan1. Et j'invoque naturellement Pan2.repaint() pour actualiser l'affichage.
Ca marche à priori mais après avoir déplacé Pan1 deux ou trois fois, il ne se déplace plus correctement comme il le faisait.
Que dois-je faire pour résoudre ce problème?
Merci
A voir également:

1 réponse

KX Messages postés 16752 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 août 2024 3 019
17 janv. 2015 à 20:23
Bonjour,

Il faudrait voir ton code pour comprendre où est l'erreur.

Remarque : il y a déjà des mécanismes de gestion du drag'n drop en Java. Exemple.
0
JOCK7 Messages postés 8 Date d'inscription dimanche 4 janvier 2015 Statut Membre Dernière intervention 18 janvier 2015
18 janv. 2015 à 15:00
Bonjour KX,
Par rapport au "drag and drop", je ne savais pas que ça existait. J'ai effectué des recherches, mais jusques là, ce que je trouve ne concerne pas les panneaux (instances de JPanel), mais plutôt des composants tels que les JTextField, etc. Je cherche toujours, mais si tu as déjà des éléments intéressants et pertinents me concernant dans ce sens, merci de me les fournir.
Par ailleurs, voici mon code:


class PanneauNoeud extends JPanel
{
private int typeNoeud,
xDepl,
yDepl;
private boolean jeBouge;

public PanneauNoeud(int typeNoeud)
{
this.typeNoeud = typeNoeud;
this.setBounds(10, 10, 36, 36);
this.setPreferredSize(new Dimension (36, 36));
this.setBackground(Color.red);
this.setOpaque(!this.isOpaque());
this.jeBouge = false;
}

public void paintComponent (Graphics noeud)
{
Graphics2D noeudL = (Graphics2D)noeud;
super.paintComponent(noeud);
noeud.setColor(this.couleurNoeud);
Stroke epaisseur = new BasicStroke(3);
if (this.typeNoeud == 0)
{
noeudL.setStroke(epaisseur);
noeud.drawOval(1, 1, 30, 30);
if (jeBouge)
{
System.out.println("Je suis en mouvement");
this.setBounds(this.xDepl, this.yDepl, 36, 36);
}
}

if (this.typeNoeud == 1)
{
noeud.fillOval(1, 1, 33, 33);
if (jeBouge)
{
System.out.println("Je suis en mouvement");
}
}
}

void bouger(int xDepl, int yDepl)
{
jeBouge = true;
this.xDepl = xDepl;
this.yDepl = yDepl;
}
}


public class PanneauPrincipal extends JPanel implements MouseListener, MouseMotionListener
{
private PanneauNoeud node;
public PanneauPrincipal ()
{
this.setLayout(new BorderLayout ());
this.node = new PanneauNoeud();
this.node.addMouseListener(this);
this.node.addMouseMotionListener(this);
this.add(node, BorderLayout.CENTER);
}
public void mouseClicked(MouseEvent e)
{

}


public void mousePressed(MouseEvent e)
{

}


public void mouseReleased(MouseEvent e)
{

}


public void mouseEntered(MouseEvent e)
{

}


public void mouseExited(MouseEvent e)
{

}


public void mouseDragged(MouseEvent e)
{
int xCourant,
yCourant;
xCourant = e.getX();
yCourant = e.getY();

if (noeudP != null)
{
noeudP.bouger(xCourant, yCourant);
}

if (noeudC != null)
{
noeudC.bouger(xCourant, yCourant);
}
}


public void mouseMoved(MouseEvent e)
{

}
}
0