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 :

Noeuds de JTree sélectionnés et UserObject


Sujet :

Composants Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 18
    Par défaut Noeuds de JTree sélectionnés et UserObject
    Bonjour !

    J'ai un petit problème pour un programme en java: il y a un arbre JTree dont les noeuds contiennent un UserObject redéfini avec deux variables: "nom" et "path".
    Je voudrais pouvoir récupérer la variable "path" de tous les noeuds séléctionnés...

    Voici mon 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
     
        private javax.swing.JTree treeClient;
     
        public String[] getTreeSelection() {
            int i = 0;
            DefaultMutableTreeNode noeud;
            String[] ret = new String[(treeClient.getSelectionPaths()).length];
           // tant qu'il reste des noeuds séléctionnés
            while(!treeClient.isSelectionEmpty()) {
                // on récupère le dernier (?) noeud séléctionné
                noeud = (DefaultMutableTreeNode)treeClient.getLastSelectedPathComponent();
                // on accède à la variable "path" du UserObject de ce noeud
                ret[i] = ((UserObject)noeud.getUserObject()).path;
                // et on déséléctionne ce noeud pour passer au prochain
                treeClient.removeSelectionRow(treeClient.getMaxSelectionRow());
                i++;
            }
            return ret;
        }
    A l'éxécution, il semble que certains "path" ne sont pas renvoyés, et d'autres sont en double. Je suppose que c'est mon 'removeSelection()' qui n'est pas adapté... Avez-vous une idée ?

    Merci

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    24
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Décembre 2006
    Messages : 24
    Par défaut
    p-e path()?

    ton code à l'air simple et normalement fait et je ne vois pas pourquoi il te retournerait des info en double... bizarre, je vais apprendre quelque chose si quelqu'un te résout ca

  3. #3
    Membre averti
    Inscrit en
    Novembre 2006
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 31
    Par défaut
    Bonjour F-eeks,

    Je travaille actuellement avec un JTree et sauf erreur de ma part, la méthode getLastSelectedPathComponent() ne retourne pas l'objet du path sélectionné le plus loin dans l'arbre, mais plutôt l'objet du dernier path du premier noeud sélectionné. Donc pour moi, la méthode getMaxSelectionRow() ne retourne pas forcément l'index de l'objet retourné par getLastSelectedPathComponent(). Et ça explique pourquoi tu as des path sélectionnés qui ne sont pas renoyés et d'autes plusieurs fois.

    Moi, je ferais putôt un truc du genre :
    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
    private javax.swing.JTree treeClient;
     
        public String[] getTreeSelection() {
            DefaultMutableTreeNode noeud;
            TreePath[] paths = treeClient.getSelectionPaths();
            String[] ret = new String[paths.length];
            // Pour tous les paths sélectionnés
            for (int i = 0; i < paths.length; i++) {
                //on récupère le noeud du path
                noeud = (DefaultMutableTreeNode)paths[i].getLastPathComponent();
                // on accède à la variable "path" du UserObject de ce noeud
                ret[i] = ((UserObject)noeud.getUserObject()).path;
            }
            return ret;
        }
    Attention, je n'ai pas testé ce code, donc ça ne marchera pas forcément du premier coup. Mais le principe et de scruter chaque élément de la sélection une seule fois grace à la boucle for.

    A+

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 18
    Par défaut
    Merci beaucoup patanoc !

    Ta solution compile et répond exactement à mes besoins !
    En effet, je comprend mieux le fonctionnement de getLastSelectedPathComponent() maintenant.

    Merci encore !

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

Discussions similaires

  1. [JTree+UserObject]Créer un JTree avec des UserObject
    Par ng.phung dans le forum Composants
    Réponses: 2
    Dernier message: 14/05/2007, 15h27
  2. [JTree] Supprimer un noeud de Jtree
    Par Houssem dans le forum Composants
    Réponses: 4
    Dernier message: 02/05/2007, 22h24
  3. JTree : Sélectionner les noeuds enfants
    Par Lebas dans le forum Composants
    Réponses: 4
    Dernier message: 26/01/2007, 15h32
  4. [JTree]Editer le userObject d'un node
    Par Raay dans le forum Composants
    Réponses: 3
    Dernier message: 14/12/2006, 14h17
  5. ouverture d'un noeud de JTree par défault.....
    Par boudou dans le forum Composants
    Réponses: 3
    Dernier message: 21/02/2006, 17h26

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