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

 Java Discussion :

[JTree] comment y stocker les objets ?


Sujet :

Java

  1. #1
    Membre confirmé Avatar de calogerogigante
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    602
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2003
    Messages : 602
    Points : 497
    Points
    497
    Par défaut [JTree] comment y stocker les objets ?
    J'ai un petit problème structurel pour avancer dans mon projet, étant encore novice dans l'utilisation des JTree.

    Je désire pouvoir gérer 4 types de lieux différents :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Site
    -> Batiment
            -> Chambre
                      -> Loge
    Un site contient des Batiments qui eux-mêmes contiennent des chambres qui contiennet des loges.

    Ces 4 types de lieux sont des objets en bonne et dûe forme que je récupère sans problème depuis ma base de données...

    Ma question est : lors de l'affichage sur l'interface utilisateur, comment assurer au plus près le mapping de ces objets avec les differentes branches visuelles de mon JTree, avec le respect du niveau hierarchique ?

    J'ai résolu ce problème facilement dans mes JTables (point de vue mapping lignes-objets) avec un vector qui contenait toutes mes références d'objets. Ce vector était présent dans l'AbstractTableModel, et la fonction getValueAt(...,...) se chargeait de transformer les différents champs des objets en String.

    Mais avec un JTree, comment faire ?

    Le mécanisme est-il similaire ?

    Faut-il que je fasse une classe qui s'occupe, à chaque ajout-modification d'objets de type lieux, de remettre à jour la structure des DefaultMutableTreeNode, et de redonner le DefaultMutableTreeNode racine au JTree à chaque modification ?

    Je ne sais pas si j'ai été clair ???? :-(

    Vos avis me seront précieux pour continuer dans la bonne voie....

  2. #2
    Membre expérimenté Avatar de herve91
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 282
    Points : 1 608
    Points
    1 608
    Par défaut
    Si tu utilises des DefaultMutableTreeNode, je pense que tu as associé à chaque noeud l'objet qui lui correspond via le constructeur qui prend un userObject en entrée (et que tu peux récupérer en chaque noeud grâce à la méthode getUserObject()). Par extension, je pense que tu utilises un DefaultTreeModel comme modèle de ton JTree. Dans ce cas, tu bénéficies de méthodes pour l'ajout, la suppression ou la modification de noeuds, resp. insertNodeInto() , removeNodeFromParent() et valueForPathChanged() ou nodeChanged(), qui ont l'intérêt de notifier la vue des changements.

  3. #3
    Membre confirmé Avatar de calogerogigante
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    602
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2003
    Messages : 602
    Points : 497
    Points
    497
    Par défaut
    Merci pour ces précisions...

    à chaque noeud l'objet qui lui correspond via le constructeur qui prend un userObject en entrée

    C'est quoi cette méthode exactement ?
    Je crois que c'est ça qui me conviendrait...

    On peut donc dire (presque) qu'il y a une similitude entre DefaultTreeModel (JTree) et AbstractTableModel (JTable)...

    Je vais chercher quelques exemples sur le net pour voir comment ça se goupille, le DefaultTreeModel...

    Je suis aussi en train de travailler sur un mini-exemple personnel contenant des Personnes et leur relation entre elle : "obéis à", pour un peu m'exercer en aparté, avant d'attaquer le JTree de mon projet qui va devoir gérer mes 4 types de lieux (comme expliqué plus haut).

    Je mettrais cet exemple à la suite de ce post d'ici peu (ce soir ou demain), pour avoir vos avis si c'est bien comme ça qu'il faut faire.
    ;-)

    EDIT :

    Ah je commence à comprendre : je viens de voir ceci dans le tutorial de Sun sur les JTree :

    The argument to the DefaultMutableTreeNode constructor is the user object — an object that contains or points to the data associated with the tree node. The user object can be a string, or it can be a custom object. If you implement a custom object, you should implement its toString method so that it returns the string to be displayed for that node.
    On peut donc directement associer l'objet à un DefaultMutableTreeNode, sans nécessairement passer par un DefaultTreeModel, à condition de redéfinir sa méthode toString().

    Mais peut-être qu'un DefaultTreeModel apporte des possibilités quand à la mise en forme de l'affichage ?

    L'exemple sur la généalogie est aussi très proche de ce que je cherche à comprendre :
    http://java.sun.com/docs/books/tutorial/uiswing/components/example-1dot4/index.html#GenealogyExample
    ;-)

  4. #4
    Membre à l'essai
    Inscrit en
    Décembre 2004
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 15
    Points : 17
    Points
    17
    Par défaut
    Je te conseil de redefinir un defaulttreemodel et un defaulttreecellrenderer !

    Il te permettra de gerer au mieu la gestion et l'affichage complet de ton JTree.

  5. #5
    Membre confirmé Avatar de calogerogigante
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    602
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2003
    Messages : 602
    Points : 497
    Points
    497
    Par défaut
    Oui, je vais m'orienter vers cette voie-là, qui offre le maximum de souplesse, en effet !!

    L'exemple sur les descendants - ascendants du tuto de SUN est très proche de ce que je recherche et montre clairement l'utilisation d'un TreeModel, et de l'utilisation d'un objet défini par le programmeur pour être stocké dans les feuilles...

    Quand j'aurai fini mon propre exemple, je le mets ici à la suite de ce post...
    ;-)

  6. #6
    Membre à l'essai
    Inscrit en
    Décembre 2004
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 15
    Points : 17
    Points
    17
    Par défaut
    Regarde sur mon sujet de checkbox ca peu peu etre t'aider, ...

    C'est un rendu simple avec cellrenderer et celleditor ...

    Ca peu peut-etre t'etre utile

  7. #7
    Membre confirmé Avatar de calogerogigante
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    602
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2003
    Messages : 602
    Points : 497
    Points
    497
    Par défaut
    Bon, je commence à m'en sortir...

    Mon petit exemple me permet déjà de stocker des objets "Personne", avec un directeur, dans un JTree, et d'afficher leur champs d'information dans l'interface utilisateur, quand on clique dessus :



    Quand j'aurais fini la possibilité de modifier et de créer une Personne, je donnerais le code à celui qui veut...

  8. #8
    Membre confirmé Avatar de calogerogigante
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    602
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2003
    Messages : 602
    Points : 497
    Points
    497
    Par défaut
    Voilà, le code complet de mon petit programme exemple a été publié dans ce post spécial "partage de sources" :

    http://www.developpez.net/forums/vie...333331#2333331

    Si vous avez des commentaires ou des critiques à faire : n'hésitez pas.
    Je suis ouvert à toute amélioration...
    ;-)

  9. #9
    Membre à l'essai
    Inscrit en
    Décembre 2004
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 15
    Points : 17
    Points
    17
    Par défaut
    Sa va ^^

    T'as bien utilisé l'exemple de généalogie !

    Je te conseillerais peut etre d'enlever les icones de dossier ... apres tout une personne n'est pas vraiment un dossier ... mais bon c'est négligeable !

    Bon maintenant je vais faire comme toi ... je vais analyser l'exemple de généalogie ...

  10. #10
    Membre confirmé Avatar de calogerogigante
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    602
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2003
    Messages : 602
    Points : 497
    Points
    497
    Par défaut
    Les dossiers sont les icones par défaut, redtux.

    Si tu cliques sur la case à cocher en bas à gauche, tu affiches alors des icones que j'ai mis dans le folder "images". Cf mini-projet version08 :

    http://membres.lycos.fr/calogerogigante/jtree_test/jtree.htm

    Je sais que des images de folder ne sont pas l'idéal pour des personnes, mais n'oublies pas qu'il s'agit d'un simple projet pour comprendre JTree, pas pour faire un programme de gestion de ressources humaines, hein !! ;-) ;-)

    Je suis déjà très content d'être arrivé à implémenter le fait de pouvoir changer d'icones en cours d'utilisation du programme !!!!

    Amicalement !!
    ;-)

  11. #11
    ms7
    ms7 est déconnecté
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Décembre 2005
    Messages : 114
    Points : 66
    Points
    66
    Par défaut
    Joli Program...

    Toute fois, je me demandait si c´etait possible de le connecter a une base de donnees (mysql, access....) histoire que l´on puisse recuperer les infos que l´on a ajouter ou modifier...

    un peu comme ce tuto http://www.netbeans.org/kb/articles/mysql-client.html

    Merci
    encore bravo.

  12. #12
    Futur Membre du Club
    Inscrit en
    Juin 2007
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 1
    Points : 5
    Points
    5
    Par défaut aidez moi
    svp je vien de creer mon projet ki contient une partie swing et lotr parti J2EE(web en JSF) ..là je suis arrivé a un truc et je suis bloké lekel je doi recupérer les valeur de Jtree a partir de ma base via hibernata .. là c pas un probléme mé ya des erreur ki saffich la ..
    d'ailleur il me donne juste la refernce d'objet pas la valeur d'objet ds .... et en deuxiemme cas qd je relance ma page il me donne juste un Jtree par defaut càd les valeur initialecomme ko il a utilisé un constructeur ss parametre mé moi g utilisé un DefaultMutableTreeModel..
    svp g besoin d evotre aide.

  13. #13
    Candidat au Club
    Inscrit en
    Mars 2007
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 2
    Points : 2
    Points
    2
    Par défaut merciiiiiiiiiiiiiiiiiiiiiiiiiiii
    merci beaucoup pour ce code qui m'a servi enormement

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

Discussions similaires

  1. [MySQL] [mysql] Comment bien stocker les infos d'un formulaire dynamique ?
    Par padjoy dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 25/11/2010, 19h28
  2. [BO XI] Comment BO choisi les objets pour "lier à" ?
    Par claclapub dans le forum Deski
    Réponses: 6
    Dernier message: 15/07/2008, 17h10
  3. [Mapping O/R] Comment se chargent les objets ?
    Par molusk dans le forum JDBC
    Réponses: 6
    Dernier message: 17/03/2006, 15h06
  4. Réponses: 5
    Dernier message: 07/07/2004, 15h13
  5. [debutant][JNI]Stocker des objet pour les rappeler plus tard
    Par Celenor dans le forum Entrée/Sortie
    Réponses: 7
    Dernier message: 28/03/2004, 01h28

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