Bonjour,
J'aimerais connaître un moyen simple de faire du drag'n drop sur un java.awt.Rectangle placé dans un JPanel tout simple.
Quelles peuvent être les méthodes ?
Merci
Bonjour,
J'aimerais connaître un moyen simple de faire du drag'n drop sur un java.awt.Rectangle placé dans un JPanel tout simple.
Quelles peuvent être les méthodes ?
Merci
Bonjour,
Ton JPanel doit implémenter DropTargetListener et déclarer un DropTarget avec l'action voulue, afin de se faire connaître en tant que cible de drag and drop (Pour une source, c'est DragSourceListener et DragSource respectivement).
Bien entendu l'implémentation de DropTargetListener est optionnelle et peut être remplacée par une classe interne.
Exemple :
Il y a un certain nombre de fonctions à gérer pour définir les cas d'acceptation du drop, notamment par rapport à l'objet déposé (selon son type ou Flavor) et dans ton cas, selon la position de la souris (dans le rectangle).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 public class MonPanel extends JPanel implements DropTargetListener { public MonPanel() { [...] DropTarget target = new DropTarget(this, this); // Là on défini l'action que l'on veut gérer (copie ou déplacement) target.setDefaultActions(DnDConstants.ACTION_COPY_OR_MOVE); } }
Exemple pour dragOver (qui se produit quand on passe l'objet sans lacher le bouton)
La partie hardue est la gestion du Flavor, tu peux transferer des Strings (il y a un type tout fait), mais aussi des objets perso, dans ce cas il te faut créer ton objet qui implemente java.awt.datatransfer.Transferable
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 public void dragOver(DropTargetDragEvent dtde) { if (rectangle.contains(dtde.getLocation()) { // On accepte l'action de DragOver dtde.acceptDrag(dtde.getDropAction()); } else { // On refuse ! dtde.rejectDrag(); } }
Si tu veux faire du drag and drop d'objets externes à l'application, ça se corse....
Partager