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

SWT/JFace Java Discussion :

Remplir une tree grâce à un arbre créée résursivement à partir de fichiers properties


Sujet :

SWT/JFace Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Août 2008
    Messages
    142
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 142
    Par défaut Remplir une tree grâce à un arbre créée résursivement à partir de fichiers properties
    Bonjour à tous,

    Dans une vue de navigation, je dois disposer d'un arbre contenant des infos sur mes futures vues telles que :
    - le nom du noeud
    - le nom du noeud parent
    - un boolean me disant si c'est une feuille ou pas
    - et d'autres informations.

    Chaque vue étant un noeud de l'arbre, il est représenté par un fichier de configuration sous forme de fichier properties(dont les champs sont de la forme "cle=valeur").

    Je sais parcourir mon repertoire de fichiers de conf, les récupérer et les utiliser. En fait, j'arrive à créer un arbre, mais je bloque quand il s'agit de mettre un noeud (contenant des vues) dans un autre autre noeud.

    Merci d'avance

  2. #2
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Par défaut
    Citation Envoyé par papaetoo Voir le message
    je bloque quand il s'agit de mettre un noeud (contenant des vues) dans un autre autre noeud.
    Un noeud de JTree ?
    Ton problème n'est pas clair
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  3. #3
    Membre confirmé
    Inscrit en
    Août 2008
    Messages
    142
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 142
    Par défaut
    Bonjour et merci pour ta réponse!

    Je me rends compte effectivement que mon message n'est pas du tout clair. Je vais essayer de l'être. Pour le modèle de données de mon arbren je dispose de deux classes : TreeObject et TreeParent avec pour source :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    public class TreeParent extends TreeObject{
    	private List<TreeObject> children;
     
        public TreeParent(String name) {
            super(name);
            this.children = new ArrayList<TreeObject>();
        }    
        public void addChild(TreeObject child) {
            this.children.add(child);
            child.setParent(this);
        }    
        public void removeChild(TreeObject child) {
            this.children.remove(child);
            child.setParent(null);
        }
        public TreeObject [] getChildren() {
            return (TreeObject [])this.children.toArray(new TreeObject[this.children.size()]);
        }
     
        public TreeParent[] getTreeParentChildren() {
            List returnValue = new ArrayList();
            for (int i = 0, n = getChildren().length; i < n; i++) {
                if (getChildren()[i] instanceof TreeParent) {
                    returnValue.add(getChildren()[i]);
                }
            }
            return (TreeParent[]) returnValue.toArray(new TreeParent[0]);
        }
     
        public boolean hasChildren() {
            return this.children.size()>0;
        }
    }	
     
    public class TreeObject implements IAdaptable {	
        private String name;    
        private TreeParent parent;
     
        public TreeObject(String name) {
            this.name = name;        
        }    
        public TreeObject(String name) {
            this.name = name;
        }    
        public String getName() {
            return this.name;
        }
        public void setParent(TreeParent parent) {
            this.parent = parent;
        }
        public TreeParent getParent() {
            return this.parent;
        }
    }
    Comme je l'ai dit plus haut, le contenu ( nom du noeud et noeud parent) de mes noeuds sont dans des fichiers de conf(.properties). Chaque noeud (feuille, ou noeud contenant des feuille) est représenté par un fichier. J'ai défini une classe utilitaire qui me permet de parser mes fichiers de conf et d'instancier mes objets (TreeObject et TreeParent) selon ce qui est définit dans les fichiers.

    Pour finir, j'ai une méthode buildModel qui se charge de créer la liste que je vais retourner à l'input du treeViewer.

    Mon problème vient du fait que j'arrive pas à bien instancier mes objets quand j'ai une arborescence supérieure à deux niveaux tel que :
    parentA
    -------parent1
    --------------leaf1
    --------------leaf2
    -------parent2
    --------------leaf3
    -------parent3
    parentB
    -------leaf4

    J'ai donc pensé à le faire récursivement, mais je ne sais pas comment m'y prendre.

    Voilà, en espérant avoir votre aide, bien à vous!

  4. #4
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Par défaut
    Citation Envoyé par papaetoo Voir le message
    Mon problème vient du fait que j'arrive pas à bien instancier mes objets quand j'ai une arborescence supérieure à deux niveaux
    désolé, mais c'est toujours pas clair. Ton soucis vient de la gestion des fichiers properties ? Je ne vois pas de soucis dans le code que tu as donné.
    Juste une chose : je trouve ça un peu crado de faire un fichier de properties par noeud. Mais je ne connais pas le fonctionnel de ton application.

    J'ai donc pensé à le faire récursivement, mais je ne sais pas comment m'y prendre.
    Oui, pour gérer un arbre, le récursif parait être une approche correcte
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  5. #5
    Membre confirmé
    Inscrit en
    Août 2008
    Messages
    142
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 142
    Par défaut
    Bonjour dinobogan,

    Je vais encore éclaicir mon problème.
    Ton soucis vient de la gestion des fichiers properties ? Je ne vois pas de soucis dans le code que tu as donné.
    Juste une chose : je trouve ça un peu crado de faire un fichier de properties par noeud. Mais je ne connais pas le fonctionnel de ton application.
    Mon souci ne vient pas de la gestion des fichiers properties, mais de la construction de mes objets. De plus, je suis daccord avec toi pour l'utilisation des fichiers ".properties", mais c'est une contrainte qu'on m'a donné.

    Si je prends l'exemple que j'ai donné pour illustrer le pb, je me retrouve avec 7 fichiers dans mon repertoire "/cfg". ces fichiers représentent parent1, parent2, parent3, leaf1, leaf2, leaf3 et leaf4; parentA et parentB n'ayant pas de fichiers de conf. Pour exemple, la gueule de deux de ces fichiers sera :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Name=leaf4
    Parent=parentB
    leaf=yes
    -----------------------------
    Name=parent2
    Parent=parentA
    leaf=no
    Dans ma méthode buildModel, pour contruire cet arbre, il me suffirai de faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    public class ModuleProvider {		
    	private static ModuleProvider content; // mon singleton
     
    	private ModuleProvider (){}
     
        public static TreeParent buildModel() {
            TreeObject to1 = new TreeObject("Leaf 1"); 
            TreeObject to2 = new TreeObject("Leaf 2"); 
            TreeObject to3 = new TreeObject("Leaf 3"); 
    	TreeObject to4 = new TreeObject("Leaf 4"); 
     
            TreeParent p1 = new TreeParent("Parent1");
    	TreeParent p2 = new TreeParent("Parent2"); 
    	TreeParent p3 = new TreeParent("Parent3"); 
     
            p1.addChild(to1);
            p1.addChild(to2);                
            p2.addChild(to3);
     
    	TreeParent pA = new TreeParent("ParentA"); 
    	TreeParent pB = new TreeParent("ParentB"); 				
     
    	pA.addChild(p1);
    	pA.addChild(p2);
            pB.addChild(to4);                
     
            TreeParent root = new TreeParent(""); 
            root.addChild(pA);
            root.addChild(pB);
     
            return invisibleRoot;
        }
     
        public static synchronized ModuleProvider getInstance() {
    	if (content != null) {
    		return content;
    	} else {
    		content = new ModuleProvider();
    		return content;
    	}
       }
    }
    Sauf cela est fait "à la main". Ce que je voudrais, c'est parcourir mon repertoire, récupérer et parser les fichiers de properties, et construire mes objets afin d'obtenir mon arbre.

    Je dispose déjà de méthode me permettant de parcourir mon repertoire, récupérer mes fichiers, les parser et récupérer le contenu pour créer mes objets. Ce que j'arrive pas à faire (honte à moi), c'est contruire automatiquement mes objets dans le bon ordre.

    Voilà, en espérant avoir été un peu plus clair, je reste à ta dispo, en espérant qu'il puisse y'avoir une âme sensible et généreuse pour m'aider ()

  6. #6
    Membre confirmé
    Inscrit en
    Août 2008
    Messages
    142
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 142
    Par défaut
    Bonsoir à tous,

    Apres avoir revu mes classiques de récursivité, j'ai pu résoudre le pb. Le code suivant est celui de la méthode récursive qui est utilsée pour construire les objets
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    public TreeObject builObject(Properties prop){
     
    		if ((propManager.getValue(prop, "leaf").equalsIgnoreCase("no"))){ // s'il ne s'agit pas d'une feuille
     
    			// on crée le noeud parent
    			TreeParent treeParent = new TreeParent(propManager.getValue(prop, "Name"));
     
    			for (int i=0; i<treeObjectProperties.length; i++){ // pour chaque fichier properties
     
    				// pour chaque fichier dont treeParent est le parent 
    				if ((propManager.getValue(treeObjectProperties[i], "Parent").equalsIgnoreCase(treeParent.getName()))){
    					treeParent.addChild(builObject(treeObjectProperties[i]));
    				}
    			}
     
    			return treeParent;
     
    		}else{ // il s'agit d'une feuille
     
    			TreeObject treeObject = new TreeObject (
    					propManager.getValue(prop, "Name"), 
    					propManager.getValue(prop, "Description"), 
    			);
     
    			return treeObject;
    		}
     
    	}
    Merci à tous!

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

Discussions similaires

  1. Remplir une zone de texte dans un gui à partir d'une autre foction
    Par Wassim123 dans le forum Interfaces Graphiques
    Réponses: 3
    Dernier message: 04/02/2009, 16h39
  2. Remplir une DropDownList grâce à une méthode ?
    Par LestoK dans le forum ASP.NET
    Réponses: 3
    Dernier message: 25/06/2008, 13h43
  3. remplir ue dropdownlist grâce à une requête sql
    Par Claire07 dans le forum ASP.NET
    Réponses: 8
    Dernier message: 28/03/2007, 12h23
  4. [C#]Remplir une tree views
    Par maitesn1 dans le forum Windows Forms
    Réponses: 3
    Dernier message: 04/07/2006, 14h03
  5. Remplir une grille à partir d'un arbre
    Par phplive dans le forum Composants VCL
    Réponses: 1
    Dernier message: 04/08/2005, 17h41

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