IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

2D Java Discussion :

Drag'n Drop - Rectangle


Sujet :

2D Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 38
    Par défaut Drag'n Drop - Rectangle
    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

  2. #2
    Membre éclairé Avatar de TrYde
    Homme Profil pro
    Responsable de l'industrialisation logiciel
    Inscrit en
    Juillet 2005
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Responsable de l'industrialisation logiciel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 55
    Par défaut
    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 :
    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);
         }
    }
    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).

    Exemple pour dragOver (qui se produit quand on passe l'objet sans lacher le bouton)

    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();
         }
    }
    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

    Si tu veux faire du drag and drop d'objets externes à l'application, ça se corse....

Discussions similaires

  1. Drag and drop "de l'extérieur"
    Par Invité dans le forum C++Builder
    Réponses: 12
    Dernier message: 31/03/2020, 10h10
  2. Drag and drop d'un label dans un rectangle
    Par juniordev dans le forum Débuter
    Réponses: 1
    Dernier message: 12/12/2013, 10h15
  3. Réponses: 0
    Dernier message: 28/02/2012, 16h29
  4. drag and drop rectangle
    Par selmaK dans le forum 2D
    Réponses: 3
    Dernier message: 08/03/2009, 11h14
  5. drag and drop
    Par jujuesteban dans le forum Composants VCL
    Réponses: 5
    Dernier message: 20/06/2003, 09h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo