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

Composants Java Discussion :

Drag and Drop d'un JTree vers un JPanel


Sujet :

Composants Java

  1. #1
    Membre habitué Avatar de Furlaz
    Homme Profil pro
    Responsable Qualité
    Inscrit en
    Mai 2006
    Messages
    210
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Responsable Qualité
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2006
    Messages : 210
    Points : 131
    Points
    131
    Par défaut Drag and Drop d'un JTree vers un JPanel
    Bonjour à tous

    Je suis entrain de développer une appli Java où l'on peut ajouter/modifier/supprimer des éléments.
    Sur la partie gauche de mon IHM j'ai mis sous forme de JTree mes éléments
    Sur la partie droite j'ai mis les formulaire pour ajouter/modifier/supprimer, ... les éléments
    Pour le moment tout fonctionne... l'ajout,modif, ... mon JTree se mets à jour et tout et tout...
    Maintenant j'aimerai pouvoir placer mes éléments sur un "plan"
    Donc j'aurai :
    - A gauche : L'arbre avec les élements
    - A droite : le plan d'une maison

    Et j'aimerai faire un Drag & Drop de l'arbre vers le plan et pouvoir déposer l'élement à l'endroit précis où je lache la souris !

    Auriez-vous des pistes pour que je puisse faire ça
    Pour le moment je suis entrain de lire le tuto : http://java.sun.com/docs/books/tutor...dnd/intro.html mais c'est un peu complexe et un peu flou encore....

    Merci d'avance

  2. #2
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2012
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2012
    Messages : 11
    Points : 9
    Points
    9
    Par défaut
    pas de réponse? o_O

  3. #3
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    pour simplifier la notion de dnd, considère trois choses :

    - la source de ton drag (ton JTree)
    - les données à transférer (géré par un TransferHandler)
    - la destination du drop (ton JPanel)

    je vais supposer que ta classe d'objet s'appelle MyObject

    pour ce qui est de la source, un moyen simple de gérer rapidement ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    DragSource ds = new DragSource();
            ds.createDefaultDragGestureRecognizer(jtree,
                DnDConstants.ACTION_COPY, draggesturelistener);
    draggesturelistener est une instance de classe implémentant DragGestureListener, interface ayant une méthode, dans laquelle :

    - tu vas déterminer quel noeud de ton arbre va être glissé (celui qui est sélectionné par exemple)
    - comment le transférer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    public void dragGestureRecognized(DragGestureEvent event) {
            Cursor cursor = null;
            JTree tree = (JTree) event.getComponent();
     
            TreePath treepath = tree.getSelectionPath();
     
            if (event.getDragAction() == DnDConstants.ACTION_COPY) {
                cursor = DragSource.DefaultCopyDrop;
            }
     
            event.startDrag(cursor, new MyObjectTransferable( (MyObject)((DefaultMutableTreeNode)selectedPath.getLastPathComponent()).
           getUserObject();));
        }
     
    }
    Pour la destination, tu peux créer une classe qui étend DropTargetAdapter

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    public class PanelDropTargetListener extends DropTargetAdapter {
     
            private DropTarget dropTarget;
            private JPanel panel;
     
         public PanelDropTargetListener(JPanel panel) {
            this.panel = panel;
     
            dropTarget = new DropTarget(panel, DnDConstants.ACTION_COPY, 
                this, true, null);
          }
     
     
          public void drop(DropTargetDropEvent event) {
            try {
     
                // on regarde si ce qui est "droppé" est bien du type qu'on veut
                if (event.isDataFlavorSupported(MyObjectTransferable.myObjectFlavor) {
     
              Transferable tr = event.getTransferable();
              MyObject object = (MyObject) tr.getTransferData(MyObjectTransferable.myObjectFlavor);
     
                  event.acceptDrop(DnDConstants.ACTION_COPY);
     
                  // ici tu fais le placement à la position (que je te laisse implémenter)
                  placeObject(object,event.getLocation());
     
                  // on accepte le drop
                  event.dropComplete(true);
                  return;
                }
              // on rejète le drop
              event.rejectDrop();
            } catch (Exception e) {
              e.printStackTrace();
              event.rejectDrop();
            }
          }
        }
    Pour le TransferHandler, :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    public class MyObjectTransferable implements Transferable {
     
        // le type d'objet à transférer
        public final static DataFlavor myObjectFlavor =
            new DataFlavor(MyObject.class, "Un élément de plan de maison");
     
        // les types d'objet transférable qu'on sait gérer avec ce Transferable
        private static DataFlavor[] supportedFlavors = {
            myObjectFlavor
        };
     
        private MyObject object;
     
        public MyObjectTransferable (MyObject object) { this.object = object; }
     
        public DataFlavor[] getTransferDataFlavors() { return supportedFlavors; }
     
        public boolean isDataFlavorSupported(DataFlavor flavor) {
            for(DataFlavor flavor : supportedFlavor ) {
                 f (flavor.equals(myObjectFlavor) ) return true;
            }
            return false;
        }
     
     
       public Object getTransferData(DataFlavor flavor) 
            throws UnsupportedFlavorException
       {
         if (flavor.equals(myObjectFlavor))
             return object;
         else 
             throw new UnsupportedFlavorException(flavor);
       }
    }
    voilà pour commencer.

Discussions similaires

  1. (jlist,jtree) drag and drop entre 2 jlist vers un jtree
    Par olivier57b dans le forum Composants
    Réponses: 0
    Dernier message: 17/04/2012, 16h20
  2. Réponses: 1
    Dernier message: 20/11/2008, 19h50
  3. Drag and Drop entre 2 JTree
    Par Lebas dans le forum Composants
    Réponses: 1
    Dernier message: 07/02/2007, 11h59
  4. Drag and Drop sur une JTree
    Par Xhéras dans le forum Composants
    Réponses: 5
    Dernier message: 07/07/2006, 12h09
  5. Drag and drop sur un JTree
    Par tomca dans le forum Composants
    Réponses: 4
    Dernier message: 02/08/2005, 10h54

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