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 & renderer]lenteur


Sujet :

Composants Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de biozaxx
    Profil pro
    Inscrit en
    Août 2004
    Messages
    403
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 403
    Par défaut [JTree & renderer]lenteur
    salut,

    j'ai un probleme de lenteur lorsque j'applique un renderer a mon JTree ...
    j'ai environ 250 000 noeuds dans mon arbre. Si je ne precise pas de renderer , l'arbre s'affiche sans probleme dans un delai de 2 sec.
    Si j'applique un renderer (change l'icone du noeud ) il me faut plusieurs minutes pour voir mon arbre afficher

    Y a t'il un moyen de remedier a cela ?

  2. #2
    Membre Expert
    Avatar de xavlours
    Inscrit en
    Février 2004
    Messages
    1 832
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 1 832
    Par défaut
    Bonjour,

    Je ne sais pas trop ... Essaie de rogner sur les instances ? Je suis presque sûr que tu n'as besoin que d'une seule instance de l'icône. Il y a peut être d'autres objets que tu multiplies pour rien ?
    "Le bon ni le mauvais ne me feraient de peine si si si je savais que j'en aurais l'étrenne." B.V.
    Non au langage SMS ! Je ne répondrai pas aux questions techniques par MP.
    Eclipse : News, FAQ, Cours, Livres, Blogs.Et moi.

  3. #3
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Un motif FlyWeight (poids mouche en VF, 'tain chuis un dieu) pourra it faire l'affaire pour tes icones

  4. #4
    Membre Expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Par défaut
    Ton renderer ne doit pas à chaque fois recréer une instance... Tu l'initialises une fois pour toutes avec les valeurs qui ne changent pas (positionnement des composants etc...), et à chaque appel par Swing, tu ne fais qu'un setIcon("..."), et ton icône doit être gardée en mémoire, bien sûr, pour ne pas la recréer à chaque fois

  5. #5
    Membre éclairé Avatar de biozaxx
    Profil pro
    Inscrit en
    Août 2004
    Messages
    403
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 403
    Par défaut
    bein a priori je construit une seule fois mon renderer (juste apres la construction de mon arbre), je fais un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    tree.setCellRenderer(new MonRenderer());
    dans le constructeur de mon renderer j'initialise mes icones
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    public MonRenderer() {
     
            isConcept = new ImageIcon(ImgLoader.class.getResource("concept.gif"));
            isThesaurus = new ImageIcon(ImgLoader.class.getResource("thesaurus.gif"));
            isgraph = new ImageIcon(ImgLoader.class.getResource("graph.gif"));
            isOnto = new ImageIcon(ImgLoader.class.getResource("ontology.gif"));
            isTaxo = new ImageIcon(ImgLoader.class.getResource("taxonomy.gif"));
    }
    et dans getTreeCellRendererComponent() je fais effectivement un setIcon()

    donc a moins qu'une chose m'echappe je ne construit qu'une seule instance.
    Maintenant j'ai 2 ou 3 tests (isRoot, isleaf, nature de l'objet mappé au noeud etc ) donc peut etre que cela vient de ca ? je vais essayé d'appliquer un renderer qui ne fait rien pour voir si ca plombe autant

    je vais également creuser le pattern flyweight pour voir ;-)

    merci pour vos réponses, je vous tient au courant ...

  6. #6
    Membre Expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Par défaut
    En fait, un renderer, tu ne crées qu'une instance, mais à chaque fois qu'un élément d'une JList ou d'une JTable ou d'un JTree est affiché, il fait appel à ton renderer...

    Le plus simple est de faire un CellRenderer en redéfinissant la seule méthode à implémenter...

Discussions similaires

  1. [JTree] Plusieurs renderers dans une JTree?
    Par pom dans le forum Composants
    Réponses: 3
    Dernier message: 29/05/2007, 11h44
  2. Renderer dans les JTree
    Par motorenshi dans le forum Composants
    Réponses: 3
    Dernier message: 17/01/2007, 11h02
  3. [Applet] Problème de lenteur d'un JTree
    Par Frac10 dans le forum Composants
    Réponses: 3
    Dernier message: 22/05/2006, 16h49
  4. [JTree avec des JCheckBox]Récupérer les "renderer".
    Par M4v3rick dans le forum Composants
    Réponses: 2
    Dernier message: 16/05/2006, 12h46
  5. Réponses: 2
    Dernier message: 17/06/2004, 11h00

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