[Swing] Drag'n'drop dans un JTree

breed1200 Messages postés 8 Date d'inscription vendredi 7 mai 2004 Statut Membre Dernière intervention 7 juillet 2004 - 11 mai 2004 à 15:57
breed1200 Messages postés 8 Date d'inscription vendredi 7 mai 2004 Statut Membre Dernière intervention 7 juillet 2004 - 7 juil. 2004 à 10:34
Salut!

Voila mon problème:

J'ai un jtree composé d'objets (pas des simples string) et j'aimerais savoir comment faire du dragndrop dessus. J'ai regardé la doc de sun sur la question mais il n'y a pas d'exemple sur les JTree, et tous les exemples traitent de simple string. D'après le peu que j'ai compris il faut que je crée un DataFlavor. En fait un exemple de code m'aiderais énormément, mais je n'ai rien trouvé sur la question.

Merci d'avance à ceux qui m'aideront!

@++

2 réponses

Lapin_mauf Messages postés 2 Date d'inscription vendredi 28 mai 2004 Statut Membre Dernière intervention 28 mai 2004
28 mai 2004 à 19:35
Salut, j'ai eu le même problème pour mon applic. Je voulais déplacer des noeuds dans l'arbre, c'est maintenant chose faite.
J'explique le principe. Pour transferer un objet il doit implementer l'interface java.awt.datatransfer.Transferable qui ne comprend que trois fonctions. Voici un noeud d'arbre qui implmente cette interface:

import java.awt.dnd.*;
import java.awt.datatransfer.*;
import java.io.*;

class FlyingNode extends javax.swing.tree.DefaultMutableTreeNode implements java.awt.datatransfer.Transferable
{     
    
     FlyingNode()
     {         
         super();
     }
     FlyingNode(Object obj)
     {         
         super(obj);
     }
     public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException, IOException {
         if(!isDataFlavorSupported(flavor))
             throw new UnsupportedFlavorException(flavor);
         else
             return this;
     }     
     public DataFlavor[] getTransferDataFlavors() 
     {       
         DataFlavor temp=null;
         try{
            temp=new DataFlavor(DataFlavor.javaJVMLocalObjectMimeType);
         }
         catch(ClassNotFoundException ex) {}
         DataFlavor[] retour=new DataFlavor[1];
         retour[0]=temp;
         return retour;
     }
     
     public boolean isDataFlavorSupported(DataFlavor flavor)
     {
         DataFlavor temp=null;
         try{
            temp=new DataFlavor(DataFlavor.javaJVMLocalObjectMimeType);
         }
         catch(ClassNotFoundException ex) {}
         return (flavor.equals(temp));
     }
}


il faut remplacer tes noeuds à délacer par cette classe et tu pourra les transferer, je me suis entièrement inspiré du code present sur cette page :

http://java.sun.com/products/jfc/tsc/articles/dragndrop/

j'espère que ca t'eclairera.
0
breed1200 Messages postés 8 Date d'inscription vendredi 7 mai 2004 Statut Membre Dernière intervention 7 juillet 2004
7 juil. 2004 à 10:34
Désolé pour le retard!!!

MAIS MERCI!!!

Effectivement ton exemple a résolu mes soucis!!!

;-)
0
Rejoignez-nous