[javafx] drag and drop treeview

Fermé
cs_quicest Messages postés 32 Date d'inscription samedi 16 juillet 2005 Statut Membre Dernière intervention 17 avril 2013 - 15 avril 2013 à 14:40
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 - 17 avril 2013 à 13:42
salut à tous,

exemple déplacer "b1" vers
les enfants de "a" dans un treeview
-a
--a1
--a2
-b
--b1
--b2  

tree.setOnDragDetected...
tree.setOnDragOver...
tree.setOnDragDropped ( new EventHandler<DragEvent>() {
 @Override public void handle(DragEvent event) {
  Dragboard db=event.getDragboard();
   boolean success=false;
   if ( event.getDragboard().hasString() ) {  
System.out.println("déplacer "+db.getString());
    success=true;
   }
   event.setDropCompleted(success);
   event.consume();
  }
 }
);

je retrouve bien b1 ( db.getString() ),
mais comment savoir que le curseur ou "dropper"
pointe sur a ou a1, a2 ... ?

merci d'avance.

9 réponses

Utilisateur anonyme
16 avril 2013 à 14:07
Bonjour

C'est expliqué ici dans la rubrique "Handling a DRAG_DONE Event on a Source" dans l'exemple n°7.























T.U.E.R (First Person Shooter créé par Julien Gouesse)
0
cs_quicest Messages postés 32 Date d'inscription samedi 16 juillet 2005 Statut Membre Dernière intervention 17 avril 2013
16 avril 2013 à 14:20
merci de votre réponse, mais euh ?
vous parlez de cela ? :
Example 7
source.setOnDragDone(new EventHandler<DragEvent>() {
    public void handle(DragEvent event) {
        if (event.getTransferMode() == TransferMode.MOVE) {
            source.setText("");
        }
        event.consume();
    }
});

j'avoue ne pas comprendre
0
cs_quicest Messages postés 32 Date d'inscription samedi 16 juillet 2005 Statut Membre Dernière intervention 17 avril 2013
16 avril 2013 à 14:45
enfin... j'ai compris que c'est
dans OnDragDone qu'on peut faire
le drop, ma question c'est "vers où" ?
comment retrouver le noeud pointé ?
merci encore.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_quicest Messages postés 32 Date d'inscription samedi 16 juillet 2005 Statut Membre Dernière intervention 17 avril 2013
17 avril 2013 à 06:45
bon, ben navré,
toujours pas compris comment faire...
tree.setOnDragDetected
(  new EventHandler<MouseEvent>()
 {  @Override public void handle(MouseEvent event)
  {  String selected=tree.getSelectionModel().getSelectedItem().getValue();
   if ( selected !=null )
   {  if ( tree.getSelectionModel().getSelectedItem().getParent()!=
      tree.getRoot() )
    {  db=tree.startDragAndDrop(TransferMode.MOVE);
     ClipboardContent content=new ClipboardContent();
     content.putString(selected);
     db.setContent(content);
     event.consume();
    }
   }
  }
 }
);
tree.setOnDragOver
(  new EventHandler<DragEvent>()
 {  @Override public void handle(DragEvent event)
  {  db=event.getDragboard();
   if ( event.getDragboard().hasString() )
   {  event.acceptTransferModes(TransferMode.MOVE);
   }
   event.consume();
  }
 }
);
tree.setOnDragDropped
(  new EventHandler<DragEvent>()
 {  @Override public void handle(DragEvent event)
  {  db=event.getDragboard();
   boolean success=false;
   if ( event.getDragboard().hasString() )
   {  success=true;
   }
   event.setDropCompleted(success);
   event.consume();
  }
 }
);
tree.setOnDragDone
(  new EventHandler<DragEvent>()
 {  @Override public void handle(DragEvent event)
  {  if ( event.getTransferMode()==TransferMode.MOVE )
   {
/* ====================
 bon, ici, db.getString() c'est l'émetteur, 
 la source
 et le récepteur ? la destination ? c'est quoi ? 
================== */
   }
   event.consume();
  }
 }
);

merci de votre patience.
0
Utilisateur anonyme
17 avril 2013 à 09:40
Essayez de traiter l'objet retourné par event.getGestureTarget() dans tree.setOnDragDone(). db.getString() ne contient pas l'émetteur, c'est plutôt le contenu textuel du tampon utilisé pendant le drag and drop. Lisez bien la documentation avant de faire des suppositions sur ce que les méthodes font.


























T.U.E.R (First Person Shooter créé par Julien Gouesse)
0
cs_quicest Messages postés 32 Date d'inscription samedi 16 juillet 2005 Statut Membre Dernière intervention 17 avril 2013
17 avril 2013 à 10:37
laissez tomber...
réponse et exemple nickel sur autre site
il faut appliquer cela sur le treeceel
pas sur le treeview
>>Lisez bien la documentation
c'est ce que j'ai fait, ne comprenant
pas tout, je demandais une aide pas de
vains "conseils".
0
Utilisateur anonyme
17 avril 2013 à 11:38
On vous a répondu ici. JavaFX permet de résoudre votre problème de plusieurs façons, tant mieux que quelqu'un d'autre vous ait proposé une solution fonctionnelle. DragEvent.getGestureTarget() aurait pu vous permettre de récupérer le TreeCell depuis la bonne callback, encore faut-il mettre l'écouteur sur le bon composant et être capable de faire un malheureux cast.

je demandais une aide pas de
vains "conseils"

Si c'est comme ça que vous vous adressez à moi, je ne vous répondrai plus (et je ne serai sûrement pas le seul). Je suis bénévole, j'essaie d'aider les gens du mieux que je peux. Plus de 90% des questions posées ici trouvent leurs réponses dans la documentation officielle de l'API Java standard, dans des exemples postés ici ou ailleurs sur Internet. Le ton que vous prenez me paraît inapproprié. Internet n'est pas le far west et n'espérez pas de coups de main de personnes que vous traitez avec mépris. Vous avez posté votre question sur au moins 3 sites (ici aussi), je ne vois pas de quoi vous êtes fier, vous auriez pu poster de votre propre gré un lien vers la solution qui vous a semblé la plus adéquate ne serait-ce que pour aider les autres membres qui rencontreront le même problème que vous. Cordialement.

























T.U.E.R (First Person Shooter créé par Julien Gouesse)
0
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
17 avril 2013 à 13:42
@quicest: C'est particulièrement impoli de ta part. gouessej a essayé de t'aider, tu as fait peu d'efforts, et lorsque quelqu'un te donne la réponse toute cuite sur un autre forum, tu te permet d'être méprisant envers un bénévol.
La personne qui t'a donné la réponse pré-machée ne t'a pas vraiment aidé, car tu ne sais toujours pas chercher, juste demander du préfait sans compréhension véritable, ni autonomie.
Peu importe tes raisons, c'est un comportement déplorable, et un réel manque de respect.

Sujet clos + avertissement pour quicest.

________________________________________________________________________
Historique de mes créations, et quelques articles:[ http://0217021.free.fr/portfolio
http://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question
0
Rejoignez-nous