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 :

[JTree] rafraichissement


Sujet :

Composants Java

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 3
    Points : 2
    Points
    2
    Par défaut [JTree] rafraichissement
    Bonjour,

    Voilà mon problèmé.

    J'ai un thread secondaire qui exécute plusieurs opérations, et qui à chaque fin d'opération doit rafraichir l'arbre (JTree) du thread principal.

    Pour cela, le thread secondaire connait le thread principal et appele une méthode de ce dernier.
    mainThread.refreshTree();

    Je n'arrive pas à implanter la méthode refreshTree(), dont le but est de rafraîchir l'arbre.

    Si je fait SwingUtilities.updateTreeComponent(tree) ou tree.updateUI(), ca fait une exception NullPointerException (alors que pourtant ca le redéssine bien, et le redimensionne bien...)

    Si je fait tree.repaint(), alors là, ya pas d'exception déclenchée, mais les dimensions ne sont pas mises à jour, et donc, vu que mon texte change, ça n'affiche qu'une partie du texte suivie de "..." car le texte est plus long...

    Comment faut-il faire ? Quelqu'un à déjà rencontré ce pb ?

    Merci d'avance !

  2. #2
    Membre à l'essai
    Inscrit en
    Mai 2003
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 20
    Points : 11
    Points
    11
    Par défaut
    Salut,

    t'as essayé la methode reload du JTree ?

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    la méthode reload ? apparemment, elle n'existe pas...

  4. #4
    Membre à l'essai
    Inscrit en
    Mai 2003
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 20
    Points : 11
    Points
    11
    Par défaut
    oui, desolé,
    c'est pas exactement une methode de Jtree, mais de DefaultTreeModel

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    fabuleux ca march !!!

    merci beaucoup !

  6. #6
    Expert confirmé
    Avatar de Hephaistos007
    Profil pro
    Enseignant Chercheur
    Inscrit en
    Décembre 2004
    Messages
    2 493
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 493
    Points : 4 166
    Points
    4 166
    Par défaut
    Il se trouve que j'ai le même problème :

    J'ai un JTree dont je créer les noeuds récursivement via une méthode creerArbre();

    Pour changer l'arbre, j'appelle de nouveau creerArbre(). En d'autres termes je créée un tout nouvel objet. Je ne sais pas si c'est correct mais bon...
    Le problème c'est que c'est l'ancien arbre qui reside à l'écran, pas le nouveau. Je cherche donc une méthode de rafraichichessement.

    Merci de votre aide.
    Il vaut mieux mobiliser son intelligence sur des conneries que mobiliser sa connerie sur des choses intelligentes --- devise SHADOKS

    Kit de survie Android : mon guide pour apprendre à programmer sur Android, mon tutoriel sur les web services et enfin l'outil en ligne pour vous faire gagner du temps - N'oubliez pas de consulter la FAQ Android

  7. #7
    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
    Quel modèle d'arbre utilises-tu ? DefaultTreeModel ou ta propre implémentation de TreeModel ? L'idée, c'est que les modifications sont apportées au modèle, ce dernier se charge de notifier la vue des changements effectués, ce faisant la vue actualise l'affichage.
    Envoie un peu de code.

  8. #8
    Expert confirmé
    Avatar de Hephaistos007
    Profil pro
    Enseignant Chercheur
    Inscrit en
    Décembre 2004
    Messages
    2 493
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 493
    Points : 4 166
    Points
    4 166
    Par défaut
    A aucun endroit de mon code je n'utilise un TreeModel donc je suppose que mon JTree utilise DefaultTreeModel.

    Mon code est très simple. Voici la signature de ma méthode creerArbre() :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    //creation recursive des noeuds. Renvoi le noeud racine
    public DefaultMutableTreeNode creerArbre();
    Et ma création du JTree :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    JTree arbre = new JTree(creerArbre());

    Puis, quand je veux mettre à jour mon arbre, je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    arbre = new JTree(creerArbre());
    system.gc(); //pour forcer à libérer l'espace utilisé par l'ancien arbre
    Mais évidemment, l'affichage n'est pas mis à jour.
    J'ai vu que la classe DefaultTreeModel possède une méthode reload() qui pourrait m'intéresser. Mais, en fait, je crois que je ne saisi pas bien la relation entre un JTree et un DefaultTreeModel.
    Il vaut mieux mobiliser son intelligence sur des conneries que mobiliser sa connerie sur des choses intelligentes --- devise SHADOKS

    Kit de survie Android : mon guide pour apprendre à programmer sur Android, mon tutoriel sur les web services et enfin l'outil en ligne pour vous faire gagner du temps - N'oubliez pas de consulter la FAQ Android

  9. #9
    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
    ouh là ! à chaque mise à jour de l'arbre tu en crées une nouvelle instance. La variable arbre ne doit plus être modifiée une fois créée (en plus elle a du être ajoutée à un container genre JPanel).
    Il faut modifier ton arbre en agissant sur le modèle. S'il s'agit d'un DefaultTreeModel, tu as par exemple la méthode insertNodeInto pour insérer un nouveau noeud dans l'arbre, ensuite la mise à jour de la vue est faite automatiquement.

  10. #10
    Expert confirmé
    Avatar de Hephaistos007
    Profil pro
    Enseignant Chercheur
    Inscrit en
    Décembre 2004
    Messages
    2 493
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 493
    Points : 4 166
    Points
    4 166
    Par défaut
    Citation Envoyé par herve91
    (en plus elle a du être ajoutée à un container genre JPanel).
    Oui, le JTree est dans un JPanel

    Citation Envoyé par herve91
    Il faut modifier ton arbre en agissant sur le modèle. S'il s'agit d'un DefaultTreeModel, tu as par exemple la méthode insertNodeInto pour insérer un nouveau noeud dans l'arbre, ensuite la mise à jour de la vue est faite automatiquement.
    C'est là qu'est le problème. Je créé cet arbre (qui est un niveau logique) à partir d'un niveau physique : le système de fichier (en vérité ce n'est pas cela, mais la problématique reste la même).
    La méthode creerArbre() prend en entrée un dossier racine (n'importe lequel), parcours récursivement les répertoires trouvés et renvoi l'arbre construit. L'utilisateur peut renommer/deplacer/creer/supprimer des fichiers/dossiers sur son disque dur, ma seule solution est de relancer ma méthode créer arbre pour recréer mon arbre.
    Si les actions renommer/deplacer/creer/supprimer se faisaient via mon interface graphique, ok, je pourrait modifier le JTree comme tu le préconise, mais la ce n'est pas le cas. Autre exemple, tu créé un JTree à partir du contenu d'un fichier texte. L'utilisateur peut ouvrir ce fichier avec le bloc-note et faire des modifs. Ensuite, il devrait cliquer sur un boutton "Rafraichir" de mon interface pour que je reconstruise l'arbre.

    Tous ces exemples simples illustrent bien mon problème. Tu vois ce que je veux dire ?
    Il vaut mieux mobiliser son intelligence sur des conneries que mobiliser sa connerie sur des choses intelligentes --- devise SHADOKS

    Kit de survie Android : mon guide pour apprendre à programmer sur Android, mon tutoriel sur les web services et enfin l'outil en ligne pour vous faire gagner du temps - N'oubliez pas de consulter la FAQ Android

  11. #11
    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
    Ok, je vois le problème. Par rapport à ton code, il y a une ligne à changer
    La première fois, tu fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    JTree arbre = new JTree(creerArbre());
    Lorsque tu veux mettre à jour l'arbre, tu fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ((DefaultTreeModel) arbre.getModel()).setRoot(creerArbre());

  12. #12
    Expert confirmé
    Avatar de Hephaistos007
    Profil pro
    Enseignant Chercheur
    Inscrit en
    Décembre 2004
    Messages
    2 493
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 493
    Points : 4 166
    Points
    4 166
    Par défaut
    Voila ce que j'ai fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    ((DefaultTreeModel) arbre.getModel()).setRoot(creerArbre());
    ((DefaultTreeModel) arbre.getModel()).reload();
    et.....ca marche !

    Merci hervé .
    Bye.
    Il vaut mieux mobiliser son intelligence sur des conneries que mobiliser sa connerie sur des choses intelligentes --- devise SHADOKS

    Kit de survie Android : mon guide pour apprendre à programmer sur Android, mon tutoriel sur les web services et enfin l'outil en ligne pour vous faire gagner du temps - N'oubliez pas de consulter la FAQ Android

  13. #13
    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
    De rien

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

Discussions similaires

  1. [JTree] rafraichissement
    Par Septembre84 dans le forum Composants
    Réponses: 2
    Dernier message: 28/04/2008, 18h35
  2. [JTree] rafraichissement d'un JTree gigantesque
    Par st20085 dans le forum Composants
    Réponses: 4
    Dernier message: 26/02/2008, 18h36
  3. [JTree] Rafraichissement
    Par Kyom dans le forum Composants
    Réponses: 5
    Dernier message: 12/02/2008, 17h14
  4. [JTree] Rafraichissement affichage
    Par Sp4ce dans le forum Composants
    Réponses: 4
    Dernier message: 21/09/2007, 10h09
  5. [JTree] Rafraichissement d'un JTree
    Par BermudaIonique dans le forum Composants
    Réponses: 2
    Dernier message: 18/01/2005, 16h47

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