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 :

afficher des informations de chaque node d'un jtree


Sujet :

Java

  1. #1
    Membre averti
    Femme Profil pro
    Inscrit en
    Janvier 2014
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Janvier 2014
    Messages : 36
    Par défaut afficher des informations de chaque node d'un jtree
    Bonsoir,

    J'ai crée une arborescence (jtree), maintenant je veux afficher les informations de chaque noeud séparément dans un jtextarea à partir d'un fichier xml, ensuite apporter des modifications au contenu et le sauvegarder. Est ce que c'est réalisable? ou bien j'utilise une base de données??
    pour l'instant j'ai pu que afficher les noms des noeuds dans un jtextarea l'une après l'autre lors de chaque clic.
    Voici le bout de code:

    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
    //Where the tree is initialized:
        tree.getSelectionModel().setSelectionMode
                (TreeSelectionModel.SINGLE_TREE_SELECTION);
     
        //Listen for when the selection changes.
        tree.addTreeSelectionListener(new TreeSelectionListener() {
    public void valueChanged(TreeSelectionEvent e) {
    //Returns the last path element of the selection.
    //This method is useful only when the selection model allows a single selection.
        DefaultMutableTreeNode node = (DefaultMutableTreeNode)
                           tree.getLastSelectedPathComponent();
     
        if (node == null)
        //Nothing is selected.     
        return;
     
        Object nodeInfo = node.getUserObject();
        if (nodeInfo instanceof String) 
            jTextarea.append((String)nodeInfo+"\n\r");
    }});
    Merci pour vos suggestions.

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Salut,

    Je t'ai déjà donné une réponse de principe dans une autre discussion.

    Dis-nous quelles informations tu voudrais afficher. Ou se trouve-t-elle ? Par exemple, s'il s'agit d'afficher les valeurs d'attributs des élements xml, tu peux stocker dans le TreeNode l'instance de classe Element (si tu as lu ton fichier xml en DOM/JDOM) au lieu d'une String : ainsi, en récupérant cette instance, tu peux récupérer les attributs et les afficher, ou les modifier.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Membre averti
    Femme Profil pro
    Inscrit en
    Janvier 2014
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Janvier 2014
    Messages : 36
    Par défaut
    Bonjour,

    Oui, les informations seront extraites d'un fichier xml à chaque sélection d'un noeud. A savoir que l'arborescence ne prendra pas toujours les mêmes noeuds, donc il faut faire une sorte de correspondance entre le noeud et l'information.

  4. #4
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Oui, justement la classe de l'objet mis en tant que userObject du TreeNode se doit d'intègrer la logique de collecte des informations liées au noeud. Je dis classe, mais si on veut pouvoir avoir différent comportement en fonction des mêmes Element xml, on peut faire une abstraction, et différentes classes qui étendent cette abstraction, et qui fournissent des façons différentes de collecter les informations. A la construction des TreeNode, on sélectionne la bonne implémentation, en fonction de ce qu'on veut faire.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  5. #5
    Membre averti
    Femme Profil pro
    Inscrit en
    Janvier 2014
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Janvier 2014
    Messages : 36
    Par défaut
    bonsoir,
    Merci pour ta réponse ,mais j'ai pas bien saisi ce que vous venez de dire, en effet le getUserObject retourne la valeur de tout
    les nœuds en communs alors que moi je veux extraire en cliquant sur chaque nœud des données se trouvant dans une balise d'un autre fichier XML.

    Par exemple sur ce fichier XML
    <solution> Ceci est une solution </solution>

    Je veux bien en cliquant sur un nœud spécifique du jtree j'obtient dans le jtextarea "ceci est une solution"
    c'est à dire comment manipluer le getUserObject pour chaque nœud à part .

    Merci =))

  6. #6
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Si en cliquant sur un noeud (qui correspond donc à un élément d'un xml 1), tu veux pourvoir afficher des informations d'un autre xml, c'est que tu as un moyen de déterminer à partir des informations du noeud cliqué quel xml, ou quel partie de ce xml. Donc il suffit que la classe utilisé pour les userObject intègre la logique de résolution de ce lien.

    Concrètement, par exemple, imaginons qu'on ait un fichier xml comme ça :

    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <root>
       <element name="nom1" link="fichier1.xml"/>
       <element name="nom2" link="fichier2.xml"/>
       <element name="nom3" link="fichier3.xml"/>
    </root>
    et fichier1.xml par exemple

    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <metadata>
       <property name="property1" value="value1"/>
       <property name="property2" value="value2"/>
       <property name="property3" value="value3"/>
    </root>

    On peut avoir une classe pour le userobject :

    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
    public class Exemple {
     
         private String nom;
         private URL fichierMetadata;
         private Map<String, String> metadata;
     
        public Exemple(String nom, URL fichierMetadata) {
            this.nom=nom;
            this.fichierMetadata=fichierMetadata;
        }
     
        public String getNom() {
           return nom;
        }
     
        public Set<String> getProperties() {
             loadMetadataIfNeeded();
             return metadata.keySet();
        }
     
        public String getProperty(String nom) {
             loadMetadataIfNeeded();
             return metadata.get(nom);
        }
     
         private void loadMetadataIfNeeded() {
             if ( metadata==null ) {
                  metadata = Utils.loadMetadata(fichierMetadata); 
             }
         }
     
    }
    Et quand tu sélectionnes un noeud, tu peux générer le texte à mettre dans le JTextArea comme ça par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Exemple exemple = (Exemple)treeNode.getUserObject();
    StringBuilder sb =new StringBuilder();
    sb.append("Nom : ").append(exemple.getNom()).append("\n");
    for(String property : exemple.getProperties()) {
         sb.append(property).append(" : ").append(exemple.getProperty(property)).append("\n");
    }
    La classe est là pour masquer à l'éxtérieur de cette classe comment aller chercher les différentes informations, et tout la logique pour aller chercher l'information au bon endroit. Si par exemple, tu as besoin de faire des recherches sur le dom pour déterminer ces informations, tu peux encapsuler l'élément directement dans la classe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public Exemple(Element element) {
            this.nom=element.getAttribute("name");
            this.element=element;
        }
    et avoir une méthode, par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public String getNomFichier() {
       Xpath xpa = XPath.newInstance("./@link"); // avec un xpath adapté on peut accèder à des informations quelconques dans le dom
       return xpa.valueOf(element);
    }
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

Discussions similaires

  1. Afficher des information sur le PC
    Par koKoTis dans le forum VBScript
    Réponses: 39
    Dernier message: 21/01/2008, 12h59
  2. Afficher des informations dans une ListView
    Par revero275 dans le forum Windows Forms
    Réponses: 3
    Dernier message: 03/04/2007, 21h58
  3. Afficher des informations de l'ordinateur
    Par christdu13 dans le forum C++
    Réponses: 1
    Dernier message: 31/05/2006, 15h38
  4. Réponses: 2
    Dernier message: 17/05/2006, 15h49
  5. afficher des informations dans un bloc div
    Par francky356 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 8
    Dernier message: 23/11/2005, 15h47

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