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 d'un JTree gigantesque


Sujet :

Composants Java

  1. #1
    Membre habitué

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 106
    Points : 182
    Points
    182
    Par défaut [JTree] rafraichissement d'un JTree gigantesque
    Bonjour
    Dans le cadre d'un projet professionnel, nous utilisons dans notre application graphique un JTree qui représente la structure d'un objet métier qui peut être représentée de la manière suivante
    Project (noeud racine)
    |_ Module0
    |_ Equation0
    |_ Equation1
    |_ Equation2
    |_ Equation1
    |_ Equation3
    |_ Equation0
    |_ Equation1
    - Module1
    |_ Equation n

    Ici chaque noeud Equation1 représente le même objet (donc avec la même référence)

    Notre JTree utilise une implémentation de TreeModel (au début nous utilisions un DefaultTreeModel avec des TreeNodes mais la complexité ayant augmenté rapidement, nous avions un problème d'utilisation de la mémoire )

    Lorsque l'on rajoute une équation métier Equation4 dans Equation1 nous devons rafraichir notre arbre (pour chaque noeud Equation1 un fireTreeNodesInserted(treePath, childIndices, children) est exécuté) pour avoir l'arbre suivant
    Project
    |_ Module0
    |_ Equation0
    |_ Equation1
    |_ Equation4
    |_ Equation2
    |_ Equation1
    |_ Equation4
    |_ Equation3
    |_ Equation0
    |_ Equation1
    |_ Equation4
    |_ Module1
    |_ Equation n


    Le problème est que Equation1 peut être représenté parfois quelques millions de fois (actuellement notre arbre contient + 2 milliards de noeuds et ca continuera d'augmenter heureusement l'arbre n'est pas expandé complètement), nous faisons donc quelques millions de fois des fireTreeNodesInserted pour chaque Equation1,
    je voudrais savoir s'il y avait un moyen de faire autrement
    Merci

  2. #2
    Membre averti
    Homme Profil pro
    Inscrit en
    Juillet 2002
    Messages
    705
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 705
    Points : 393
    Points
    393
    Par défaut
    Ca se fait pas de représenter graphiquement un si gros modèle de données

    Il faut travailler en Lazy Loading; en somme tu ne représentes graphiquement que ce qui est visible comme noeuds. Quand un utilisateur ouvre un noeud on récupère l'évènement puis on construit la branche que l'utilisateur veut voir avant de la lui présenter.

  3. #3
    Membre habitué

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 106
    Points : 182
    Points
    182
    Par défaut
    Citation Envoyé par Alec6 Voir le message
    Ca se fait pas de représenter graphiquement un si gros modèle de données

    Il faut travailler en Lazy Loading; en somme tu ne représentes graphiquement que ce qui est visible comme noeuds. Quand un utilisateur ouvre un noeud on récupère l'évènement puis on construit la branche que l'utilisateur veut voir avant de la lui présenter.
    Tout a fait, c'est pour cela que nous avons réimplémenter notre propre TreeModel et que nous n'utilisons plus un DefaultTreeModel.

    Notre problème est que si j'ajoute un noeud (Equation4) dans des milliers (Equation1), je dois lancer des milliers de fois des fireTreeNodesInserted pour chaque TreePath contenant Equation1

  4. #4
    Débutant
    Inscrit en
    Avril 2007
    Messages
    360
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 360
    Points : 132
    Points
    132
    Par défaut
    tu peux proceder autrement
    voila quand tu modifie ton jtree tu met a jour ton modele et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mytree.setModel(Vector)
    voila mon exemple avec jtreetable mais un modele personnalisé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
                if (mTreeTablePanel==null)
                        {
                            mTreeTablePanel =new TreeTablePanel(mDBaccess.getTreeVecteur(mTreeStructure), 
                                                       mTreeNbreCol, mTreeIndex, cNames, cTypes, 
                                                       cEdit);
                        }else{
                            mTreeTablePanel.setModel(mDBaccess.getTreeVecteur(mTreeStructure));
                            mTreeTablePanel.formatTable();
                        }
    je fait setmodele()
    il faut mettre ajour le modele

  5. #5
    Membre émérite
    Avatar de gifffftane
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 354
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 2 354
    Points : 2 582
    Points
    2 582
    Par défaut
    J'avoue ne pas comprendre votre approche. En effet, quelque soit la taille de l'arborescence, le JTree ne demande la valeur d'un noeud que si il est affiché. Et non seulement affiché, mais de plus visible.

    Normalement, le JTree ne demande donc qu'un nombre très réduit de valeurs.

    Donc, soit vous parvenez à rendre visible tout votre JTree gigantesque (?), soit il y a quelque chose qui ne tourne pas rond quelque part dans votre JTree / Modèle / Donnée.

    L'idée générale est de n'avoir à calculer une valeur que si elle est demandée. Cela se complique un peu si elle peut se modifier alors qu'elle est déjà affichée.

    En tout état de cause, dans les grosses arborescences, il y a forcément une désynchronisation entre le JTree, son modèle, les données.

    Bon, par rapport à ces principes de base, qu'avez-vous fait / loupé ?
    Mieux que Google, utilisez Sur Java spécialisé sur la plate-forme java !
    Pour réaliser vos applications Java dans le cadre de prestations, forfait, conseil, contactez-moi en message privé.

Discussions similaires

  1. [JTree] rafraichissement
    Par Septembre84 dans le forum Composants
    Réponses: 2
    Dernier message: 28/04/2008, 18h35
  2. [JTree] Rafraichissement
    Par Kyom dans le forum Composants
    Réponses: 5
    Dernier message: 12/02/2008, 17h14
  3. [JTree] Rafraichissement affichage
    Par Sp4ce dans le forum Composants
    Réponses: 4
    Dernier message: 21/09/2007, 10h09
  4. [JTree] rafraichissement
    Par nurn dans le forum Composants
    Réponses: 12
    Dernier message: 29/07/2005, 14h41
  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