Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2758 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  Faire des categories avec un JTree

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Faire des categories avec un JTree

n°736114
spitagor
Posté le 24-05-2004 à 14:32:21  profilanswer
 

Bonjour
 
Mon but est de créer une librairie de composants. Ces composants sont stockés sur disque en tant que fichiers serialisés.
 
Je voudrais pouvoir classer ces composants dans des catégories, et je dois pouvoir rajouter/enlever des composants...
 
J'aurais des catégories par défaut. Mon problème est en fait d'insérer les comoposants en tant que noeuds dans l'arbre. exemple : j'ai un composant "capteur de temperature en degres", qui fait partie de la sous catégorie "capteur de temperature" , elle meme faisant partie de la catégorie "capteur".
 
J'ai lu le tutorial, mais cela reste encore obscur pour moi, alors si vou pouviez m'eclairer (nraynaud :love: ), ca serait bien cool
 
Je sais qu'il va falloir faire un model (hérité de DefaultTreeModel), mais il y a d'autres interfaces qui permettent de savoir les "requirement" pour qu'un objet soit un noeud de l'arbre, et ca ca m'embrouille grave, je sais plus torp quoi utiliser...
 
Merci beaucoup

mood
Publicité
Posté le 24-05-2004 à 14:32:21  profilanswer
 

n°736401
spitagor
Posté le 24-05-2004 à 16:23:24  profilanswer
 

hem, pour poser une question plus précise, j'ai commencé par faire des  classes Catégories et SousCategorie()   pour les mettre dans l'arbre, est ce une bonne solution?

n°736460
pascal34
one point !
Posté le 24-05-2004 à 16:49:05  profilanswer
 

Si tu es dérouté par le nombre de méthodes dans DefaultTreeModel, regarde l'interface de base : TreeModel.
 
Ensuite que tu fasses ou non des classes Category et SousCategories dépend de ton architecture, pas du fait que tu vas utilser un JTree. Tu peux très bien afficher sous forme d'arbre des données qui n'ont rien d'arborescent.
 
De plus tu n'es pas obligé de dériver de DefaultTreeModel pour faire ton modèle, tu peux créer ta propre classe qui implémente TreeModel.


Message édité par pascal34 le 24-05-2004 à 16:49:55
n°736522
spitagor
Posté le 24-05-2004 à 17:31:15  profilanswer
 

oui, mais en fait j'ai du mal a choisir entre faire mon JTree a partir d'un TreeNode, ou a partir d'un TreeModel...
 
 
Et le probleme, c'est que je veux que seules les feuilles d emon arbre contiennent des Objets Custom, et non pas les branches (qui seront de categories /sous categories)

n°736588
pascal34
one point !
Posté le 24-05-2004 à 18:59:40  profilanswer
 

spitagor a écrit :

oui, mais en fait j'ai du mal a choisir entre faire mon JTree a partir d'un TreeNode, ou a partir d'un TreeModel...
Et le probleme, c'est que je veux que seules les feuilles d emon arbre contiennent des Objets Custom, et non pas les branches (qui seront de categories /sous categories)


 
Tu mélange un peux tout.

  • TreeModel, c'est l'interface par laquelle un JTree communique avec un modèle pour savoir comment se construire (noeuds, sous-noeuds, etc., neouds feuilles). TreeModel représente l'arbre au niveau global.
  • TreeNode, c'est une interface qui représente un noeud dans l'arbre (noeud simple ou noeud feuille). TreeNode représente l'arbre à un niveau local restreint à lui-même et ses noeuds enfants s'il en a.


Si tu remarques bien, Les méthodes d'un TreeModel travaillent avec des TreeNode.
 
Pour revenir à ton problème, tes catégories, sous-catégories et éléments terminaux, correspondent chacun à un TreeNode (Les classes correspondanes peuvent implémenter TreeNode). Tu devra avoir en plus une classe modèle qui implémente l'interface TreeModel pour renseigner le JTree de sa structure globale.

n°736675
spitagor
Posté le 24-05-2004 à 20:51:36  profilanswer
 

Ok, je commence a apprehender un peu mieux la question...
 
Donc dans tous les cas j'aurais des treenode dans mon tree (logique :) )
Mais je me pose une question : A chaque lancement de mon application, je vais chercher les feuilles de l'arbre (mes objets, en gros). Ces objets possèdent une catégorie (cette catégorie apparait obligatoirement dans l'arbre, puisque l'ajout/suppression  de catégories se fait directement sur l'arbre). Seulement, chaque catégorie peut etre une sous catégorie d'une autre, et cela à l'infini...  
 
Dans ce cas la, au moment de la création de mon arbre (puisque je vais le créer a chaque lancement de mon appli), comment "insérer" les Objets dans les bonnes categories?
 
Car, au pire, je peux prendre une Hashmap pour mapper les objets vers les catégories, mais comme je ne connais pas les "super-catégories", j'ai du mal a voir comment je vais pouvoir définir le "TreePath" jusqu'a mon objet...
 
La, je suis un peu bloqué sur ce problème, et j'ai du mal a voir comment m'en sortir, mais ca doit etre possible !!!
 
Merci pour vos reponses !
 
PS : je viens de penser a un truc : si je fais ca :
 

Code :
  1. public class Category extends TreeNode
  2. private String name;
  3. private ArrayList subcategories=new ArrayList();
  4. public Category(name)
  5. {
  6. this.name=name;
  7. }
  8. public addSubCat(String name)
  9. {
  10. this.subcategories.add(new Category(name))
  11. }


 
C'est barbare, ou ca pourrait etre la bonne voie?
 

n°736705
pascal34
one point !
Posté le 24-05-2004 à 21:37:26  profilanswer
 

Quand on considère une 'feuille' de ton arbre, tu dois bien savoir combien de catégories il y a au-dessus jusqu'à la racine avant d'afficher l'arbre. Sinon tu ne peux pas construire ton modèle !!!
 
Pour ce qui est des modifications, il faut toujours les faire sur le modèle. Tu peux mettre un menu contextuel sur les noeuds de l'arbre pour ajouter ou supprimer une catégorie Mais la modification induite par la selection d'un item du menu doit se faire sur le modèle et après faire un rafraichissement de l'arbre. Les modèles, que se soit pour un JTree ou un JList ou autre, servent à ça.


Message édité par pascal34 le 24-05-2004 à 21:38:05
n°736748
spitagor
Posté le 24-05-2004 à 22:10:28  profilanswer
 

Citation :

Quand on considère une 'feuille' de ton arbre, tu dois bien savoir combien de catégories il y a au-dessus jusqu'à la racine avant d'afficher l'arbre. Sinon tu ne peux pas construire ton modèle !!!


Pas con  :D  
 
peut etre que le probleme se situe la effectivement...
 
Quand je crée mon objet, je lui donne une catégorie. Point...
 
Bon, je vais réflechir, merci bien :hello:  
 

n°736754
nraynaud
lol
Posté le 24-05-2004 à 22:14:43  profilanswer
 

je te préviens tout de suite : tu ne m'enculeras pas !


---------------
trainoo.com, c'est fini
n°736766
spitagor
Posté le 24-05-2004 à 22:21:43  profilanswer
 

Ben, non, vu que je crée mes catégories a partir de l'arbre...
 
ensuite, pour définir une catégorie, je choisis parmi toutes les catégories de l'arbre :sweat:

mood
Publicité
Posté le 24-05-2004 à 22:21:43  profilanswer
 

n°736773
spitagor
Posté le 24-05-2004 à 22:25:53  profilanswer
 

nraynaud a écrit :

je te préviens tout de suite : tu ne m'enculeras pas !


 
Tout de suite... :lol:  
 
C'etait une marque d'affection  ;)  
 
ok j'arrete  :whistle:

n°736804
spitagor
Posté le 24-05-2004 à 22:51:38  profilanswer
 

Bon, apres avoir réflechi, voila mon vrai problème il me semble :  
 
 
J'ai des Objets avec des catégories
 
comment spécifier qu'un catégorie est la sous catégorie d'une autre
 
OU alors je suis en train de m'embrouiller  :pt1cable:  
 
 
Comme on dit , la nuit porte conseil  :jap:

n°737121
pascal34
one point !
Posté le 25-05-2004 à 08:27:17  profilanswer
 

Tu veux dire que les infos sur les catégories sont dans les objets sérialisés ?

n°737134
spitagor
Posté le 25-05-2004 à 08:49:36  profilanswer
 

oui, c'est ca.
 
Ca pose problème?

n°737218
pascal34
one point !
Posté le 25-05-2004 à 09:47:09  profilanswer
 

spitagor a écrit :

oui, c'est ca.
 
Ca pose problème?


 
Ben pas vraiment.
Sauf que pour pouvoir placer un objet dans ton arbre, il faut que tous les noeuds des catégories au dessus soient placées d'abord.
En terme de JTree/Modèle, le JTree commence à se construire depuis la racine vers les feuilles.
 
Ca implique donc que tu lises tous les objets sérialisés pour en extraire toutes les catégories, les hiérarchiser, et les fournir au JTree par l'intermédiaire du modèle.
 
Le JTree appelle getRoot() sur le modèle en premier, puis demande au modèle le nombre de noeud sous la racine, puis demande au modèle chaque noeud qu'il doit placer et recommence ainsi sur chaque noeud sous la racine qu'il vient de placer. Il arête de construire une branche quand isLeaf() renvoie true (c'est un noeud feuille donc sans enfant).
 
Cependant, je crois que le JTree ne charge pas toutes les noeuds du modèle en une seule fois (consommation mémoire). Il demande seulement les noeuds dont il a besoin pour s'afficher correctement la première fois. Ensuite c'est quand tu déploie un sous-niveau qui n'a jamais été chargé qu'il interroge le modèle pour avoir les noeuds de cette branche.
 
Maintenant, tu peux intercepter les évènements d'expansion et de repliement de branche pour gérer les objets en mémoire.

n°737237
spitagor
Posté le 25-05-2004 à 09:56:29  profilanswer
 

ok, ok...  
 
mais le problème est que je ne sais pas trop comment faire pour hierarchiser ces catégories, sacahtn qu'il peut y en avoir une infinité...
 
Merci en tout cas, je vais enccore réflechir
 
 :)

n°737738
pascal34
one point !
Posté le 25-05-2004 à 14:25:31  profilanswer
 

spitagor a écrit :

... qu'il peut y en avoir une infinité...


 
T'es pas un peu marseillé toi, peuchère  :lol:  
 
Si tes objets contiennent les infos de catégorie mais que tu ne sais pas  laquelle va aller sous quelle autre, c'est un problème de spécification et pas d'architecture ou de codage.


Message édité par pascal34 le 25-05-2004 à 14:25:42
n°737769
spitagor
Posté le 25-05-2004 à 14:35:00  profilanswer
 

effectivement, je suis du Sud ;)  
 
 
quand je dis une infinité, ca veut dire 4 ou 5 niveaux maximum en fait :D  
 
en fait, il me faudrait tout simplement une structure de données extensible pour stocker les categories... je vais voir du coté des listes chainées...

n°737856
pascal34
one point !
Posté le 25-05-2004 à 15:10:41  profilanswer
 

Un objet sérialisé contient-il seulement le nom de la catégorie à laquelle il est rattaché ou toute la liste jusqu'à la racine de l'arbo ?

n°737910
spitagor
Posté le 25-05-2004 à 15:29:22  profilanswer
 

ca m'arrangerai si il connaissait la list, mais malheureusement, lorsque je definis la categorie d'un composant, je donne juste son nom, et pas la liste des categories...
 

n°738072
pascal34
one point !
Posté le 25-05-2004 à 16:39:19  profilanswer
 

spitagor a écrit :

ca m'arrangerai si il connaissait la list, mais malheureusement, lorsque je definis la categorie d'un composant, je donne juste son nom, et pas la liste des categories...


 
Alors tu peux définir la hiérarchie des catégories dans une structure externe comme un fichier XML et t'en servir pour construire l'arbre

n°738427
spitagor
Posté le 25-05-2004 à 19:31:22  profilanswer
 

ok, mais is je prends un fichier XML , il faut bien pouvoir le construire /le modifier, donc je pense pour voir le faire avec un JTree :pt1cable: , mais plus  raisonnablement avec une JList de toutes les catégories, avec un bouton "ajouter une sous catégorie a cette catégorie"
 
ca me parait possible comme ca, tu as une autre idée?

n°738441
pascal34
one point !
Posté le 25-05-2004 à 19:44:59  profilanswer
 

spitagor a écrit :

ok, mais is je prends un fichier XML , il faut bien pouvoir le construire /le modifier, donc je pense pour voir le faire avec un JTree :pt1cable: , mais plus  raisonnablement avec une JList de toutes les catégories, avec un bouton "ajouter une sous catégorie a cette catégorie"
 
ca me parait possible comme ca, tu as une autre idée?


 
Je pense que je manque d'info pour réellement cerner ton problème.
A mon avis, ton principal problème est que tu ignores quasiment tout de la façon de ranger tes objets dans la hiérarchie de catégories car tu ignores combien tu en as et comment elle se rangent les unes par rapport aux autres.
Commence par résoudre ce problème en essayant de figer un peu la structure des catégories sinon tu t'en sortiras pas.

n°738630
spitagor
Posté le 25-05-2004 à 22:30:48  profilanswer
 

ok :  
 
je pense que mon probleme peut etre pris a part pourtant :
 
Je voudrais simplement créer des categories dans mon JTree, c'est ca qui va définir mon architecture :
 
concretement j'aurais :
 
capteurs  
|
|-capteurs de temperature
||
||-capteurs de temperature en degres Celsius
|||-moncapteurdetemperatureendegresC
|||-mon2emecapteurdetemperatureendegresC
||-capteurs de temperature en degres Farenheit
|||-moncapteurdetemperatureendegresF
||
 
etc...
 
Quand je lis mon dossier d'Objets sérialisés, je veux que ces Objets se placent au bon endroit dans l'arbre
 
d'ou la solution de xml pour sauvegarder cette architecture de catgories qui  me parait pas mal, mais un peu lourde :??:

n°739267
pascal34
one point !
Posté le 26-05-2004 à 10:54:05  profilanswer
 

Voilà !!!
 
C'est plus précis.
Dans le fichier XML tu fais qqch comme ça :
 

Code :
  1. <?xml version="1.0" encoding="ISO-8859-1"?>
  2. <categories>
  3. <category id="0" name="Capteurs">
  4.  <category id="10" name="Capteurs de températures">
  5.   <category id="100" name="Capteurs de températures en degrés celcius">
  6.    <object id="1000" name="MonCapteurEnDegré1" file="c:\apps\sensors\degree1.ser"/>
  7.    <object id="1001" name="MonCapteurEnDegré2" file="c:\apps\sensors\degree2.ser"/>
  8.   </category>
  9.   <category id="101" name="Capteurs de températures en degrés Farenheit">
  10.    ...
  11.   </category>
  12.  </category>
  13.  <category id="11" name="Autres Capteurs">
  14.   ...
  15.  </category>
  16. </category>
  17. </categories>


 
id= 0 correspond à la racine.
les id entre 10 et 99 correspondent aux éléments de niveau 2
les id entre 100 et 999 correspondent aux éléments de niveau 3
etc.
 
Les ids doivent être unique dans tou le xml.
Les attributs 'name' permettent d'avoir qqch à afficher pour les noeuds de l'arbre (voir DefaultTreeCellRenderer)

n°740505
spitagor
Posté le 26-05-2004 à 18:34:07  profilanswer
 

ok :pt1cable:  
Donc en fait, la mise a jour de l'arbre mettra a jour le fichier xml , qui sert lui meme a construire l'arbre au lancement de l'application si j'ai bien tout compris...

n°740997
pascal34
one point !
Posté le 27-05-2004 à 09:02:33  profilanswer
 

spitagor a écrit :

ok :pt1cable:  
Donc en fait, la mise a jour de l'arbre mettra a jour le fichier xml , qui sert lui meme a construire l'arbre au lancement de l'application si j'ai bien tout compris...


 
Oui, enfin pas tout à fait.
Il te faut lire le fichier XML au démarrage avec JDom (c'est très bien foutu et plus simple que DOM ou SAX à utiliser), tu fais un TreeModel qui s'appuie sur l'arborescence de ton fichier XML.
Les ajouts ou suppression se font dans ton TreeModel qui répercute sur l'arborescence JDom de ton XML. Quand ton appli se termine, tu réécris le fichier XML à partir de l'arborescence XML de JDom.
 
Tu doit quand même gérer tes objets sérialisés hors du XML (le fichier XML ne fait que référence au chamin du fichier de l'objet sérialisé). Si tu supprimes un objet sérialisé, faut mettre à jour le fichier XML, etc.
 
Ca se fait pas tout seul quand même.  :jap:


Message édité par pascal34 le 27-05-2004 à 09:06:03
mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  Faire des categories avec un JTree

 

Sujets relatifs
[JTree] Personnalisation des icones des feuilles de l'arbre[Swing][jtree]Problemes d'icones....
[swing][jtree]Inserer des icon+curseur personaliser+changement couleurjtree correction
Jtree infojtree
JTreeJTree : empecher les collapse ?
asp sessions : pour des accés restreints à certaines catégories[swing] scrollpane et jtree
Plus de sujets relatifs à : Faire des categories avec un JTree


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)