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 n drop / JTree / remove


Sujet :

Composants Java

  1. #1
    Futur Membre du Club
    Inscrit en
    Août 2006
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 15
    Points : 8
    Points
    8
    Par défaut Drag n drop / JTree / remove
    (Re)Bonjour a tous,

    Apres quelques aventures en matiere de Dnd enfin résolu (merci ), je m'attaque a un autre soucis.
    Imaginons un JTree, et disons que je souhaite faire du drag n drop d'un élement de mon arbre dans uns corbeille (JButton). Mon élément Transferable rend comme objet un TreePath.
    Donc quand mon drop se termine je recupere un TreePath.
    Ce qui est étrange c'est que mon path est bien reconnu, je peux recupérer les fils, les peres, etc ... mais lorsque je veux faire un remove de ce path sur l'arbre ca ne marche pas !
    J'ai l'impression qu'il n'associe plus mon TreePath avec le DefaultTreeModel de mon arbre !?

    D'ou ma question, que fait réellementle Dnd, lorsque l'on définis des actions type MOVE, COPY, ou LINK, que se passe-t-il vraiment ??? JAVA duplique-t-il les objets ?? etc ...

    Je n'ai pas trouvé de doc me permettant de comprendre ce qui se faisait derriere, et comment choisir entre MOVE/LINK/COPY !! perso je ne vois pas de différence ...

    merci

  2. #2
    Membre à l'essai
    Inscrit en
    Novembre 2006
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 31
    Points : 15
    Points
    15
    Par défaut
    Bonjour snico,

    A première vue et si j'ai bien tout compris, si depuis ton path tu arrives à récupérer les fils et les pères, c'est que le lien avec le modèle du JTree est bon. Donc il n'y a pas de raison que le remove ne marche pas ...
    J'ai l'impression que ton roblème viens plutôt de la manière avec laquelle tu fais le remove ou que ton arbre n'est pas rafraichit après la suppression de ton noeud.

    Si tu pouvais poster ton code du remove, ca nous aiderais ...

    Moi je ferais un truc du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    DefaultMutableTreeNode dndNoeud = (DefaultMutableTreeNode)dndPath.getLastPathComponent();
    dndNoeud.removeAllChildren();
    dndNoeud.removeFromParent();
    A+

  3. #3
    Futur Membre du Club
    Inscrit en
    Août 2006
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 15
    Points : 8
    Points
    8
    Par défaut
    Salut,


    Merci pour la reponse.
    Donc je recupère un TreePath, et je fais (en gros) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    DefaultMutableTreeNode dndNoeud =(DefaultMutableTreeNode)dndPath.getLastPathComponent();
    DefaultMutableTreeNode parent = dndNoeud.getParent();
    parent.remove(dndNoeud);
     
    arbre.getModel().reload();
    Il a plusieurs facon de supprimer un noeud dans l'arbre. Et je suis certain que l'erreur ne vient pas de la suppression.
    En fait, j'ai reussis a bidouiller un truc qui parcours mon arbre, compare avec le TreePath recupéré en Dnd, et lorsqu'il trouve le meme, le supprime. Donc je peux le faire marcher...
    Mais le TreePath que je recupere par Dnd provient d'un autre objet (ils n'ont pas le meme hashCode() !), d'ou ma question, que ce passe-t-il réellement lorsqu'on fait du Dnd, et quelle est la différence entre les action MOVE, COPY, LINK, etc ... comment JAVA gère la mémoire, et ses objets !?

    J'en demande un peu trop p-t :-) mais c'est qqchose d'interessant je trouve !
    +a

  4. #4
    Membre à l'essai
    Inscrit en
    Novembre 2006
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 31
    Points : 15
    Points
    15
    Par défaut
    snico,

    Ta manière de supprimer le noeud me parrais effectivement bonne. Quand tu dis que ça ne marche pas, qu'est-ce que tu veux dire ?
    Est-ce que ton arbre est raffraichi ou pas ? Normalement oui, c'est obligé avec la méthode reload.
    Est-ce que tu as une erreur ou une exception qui apparait ? Si ce n'est pas le cas, je persiste à dire que la suppression doit être correctement réalisée. Il n'y a pas de raison ...
    Essaye peut être cette autre méthode. Elle fait la suppression et le rafraichissement directement depuis le model. Si tu n'as pas d'erreur lors de l'execution, c'est obligé que ça marche ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    DefaultTreeModel model = (DefaultTreeModel) arbre.getModel();
    model.removeNodeFromParent(dndNoeud);
    Si tu pouvais nous poster plus de code sur ta manière d'implémenter le dnd on pourrais mieux t'aider. Utilises-tu une classe de TransferHandler ? Si oui, peus-tu nous montrer son code ?

    Sinon, pour les hashCode () du TreePath, c'est parfaitement normal qu'ils soient différents. Pour moi, les TreePath ne sont pas des objets sockées dans ton arbre comme peuvent l'être les noeuds. Ce sont des objets créés et retournés par les methodes que tu appelles.

    Sinon la différence entre le MOVE et le COPY se trouve normalement dans les méthodes canPerform() et executeDrop() de ta classe TransferHandler, ou le type d'action dnd en cours doit être testé pour un traitement différent. En tous cas c'est comme ça que je fais ...

    Sinon en quelle version de java es-tu ? Il me semble bien qu'il y a une différence de gestion du dnd entre java 5 et java 6. Comme je suis encore en java 5, mes commentaires sont valables uniquement pour cette version.

    Sinon pour ta question à propos de la gestion de la mémoire et des objets en java, je pense que tu trouveras plus d'informations sur un forum plus général sur java que sur le forum Awt\Swing. Sans oublié les autres sources d'infos, faq et tutos ...

    A+

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Drag and drop jtree
    Par jose.hello dans le forum Composants
    Réponses: 6
    Dernier message: 28/05/2010, 11h30
  2. Drag and Drop Jtree sous jdk 1.5
    Par iRonny dans le forum Composants
    Réponses: 3
    Dernier message: 01/04/2009, 11h10
  3. Drag and Drop Jtree
    Par reno_tidus dans le forum Composants
    Réponses: 14
    Dernier message: 26/09/2007, 10h17
  4. Drag And Drop Jtree
    Par mkl78 dans le forum Composants
    Réponses: 3
    Dernier message: 29/06/2007, 13h40
  5. Drag n drop Jtree
    Par bolivari dans le forum Composants
    Réponses: 6
    Dernier message: 23/03/2007, 12h05

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