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 :

Refresh de la largeur d'un noeud


Sujet :

Composants Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 5
    Par défaut Refresh de la largeur d'un noeud
    Bonjour,
    Je dois développer un arbre où :
    - La valeur des noeud est spécifique.
    - Un tooltip est affiché quand je passe sur un noeud.
    - La valeur affichée dans les noeuds peut être modifiée sans que le modèle ne soit modifié, mais en appelant une méthode spécifique de mon implementation de TreeNode.

    Pour ce dernier point, par exemple :
    - Par défaut j'affiche toString() de mon objet CustomTreeNode.
    - A la suite d'un évènement (genre je coche un JCheckBoxMenuItem dans un menu, ou j'appuie sur une combinaison de touche), j'affiche getUuid() de mon objet CustomTreeNode.

    Tout ça fonctionne plutôt au bémol suivant.

    Sur les noeuds
    - développés (sur lesquels sont affichés toString()),
    - dont la largeur par défaut (appliquée pour l'affichage de toString()) est inférieure à la la largeur modifiée (celle de getUuid()),

    => la largeur du noeud ne se rafraichit pas, la chaîne de caractère est coupée et sont affichés ... à la fin du noeud.

    J'ai essayée plein de trucs dans mon CustomCellRenderer (surcharge de getDimension(), surcharge de repaint() et d'autre...), mais rien n'y fait...

    L'un d'entre vous aurait il déjà rencontré le problème, et saurait il comment le corriger? J'ai pas mal cherché sur le net, mais je n'ai trouvé aucune réponse...

    Merci de votre aide !

    A ++

  2. #2
    Membre confirmé
    Profil pro
    Ingénieur
    Inscrit en
    Mars 2009
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur

    Informations forums :
    Inscription : Mars 2009
    Messages : 152
    Par défaut
    Salut,

    Essaie la méthode reload de DefaultTreeModel.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 5
    Par défaut
    Merci pour ta réponse.

    Ca fonctionne partiellement : l'ensemble de mes TreeNodes sont rechargés, mais ils sont également tous collapsed, ce qui est contraignant pour l'utilisateur, car il doit tout réouvrir tous les noeud juste pour avoir un changement de vue sur chaque TreeNode.

    Personnellement, j'utilise l'appel suivant :
    tree.getTreeModel().nodeChanged(tree.getTreeModel().getRootNode() );

    Qui a pour conséquence de recharger l'arbre sans toucher aux états collapsed/expanded MAIS ne recharge pas la taille des labels du Renderer.

    Je vais essayer de creuser pour voir s'il n'y a pas moyen de réappliquer l'ensemble des états collapsed/expanded de mes TreeNodes avant d'appliquer reload()

    Si qq'un a une solution, je suis preneur..

  4. #4
    Membre confirmé
    Profil pro
    Ingénieur
    Inscrit en
    Mars 2009
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur

    Informations forums :
    Inscription : Mars 2009
    Messages : 152
    Par défaut
    Essaie ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    DefaultTreeModel tm = (DefaultTreeModel) (arbre.getModel());
    Enumeration<TreePath>  tps =   arbre.getExpandedDescendants(arbre.getPathForRow(0));
    tm.reload();
    while(tps.hasMoreElements()) {
    arbre.expandPath(tps.nextElement());
    }
    Tu stocke les chemins expensés, tu recharge le modèle puis tu expenses les chemins stockés.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 5
    Par défaut
    Merci laurentze,
    Je teste ça demain et te tiens informé.
    A +

  6. #6
    Membre averti
    Inscrit en
    Novembre 2009
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 31
    Par défaut
    Citation Envoyé par daffy_cricket Voir le message
    - La valeur affichée dans les noeuds peut être modifiée sans que le modèle ne soit modifié, mais en appelant une méthode spécifique de mon implementation de TreeNode.
    model.reload(noeud) plutôt que model.reload(), ça ne changera pas l'état de ton arbre.

  7. #7
    Membre confirmé
    Profil pro
    Ingénieur
    Inscrit en
    Mars 2009
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur

    Informations forums :
    Inscription : Mars 2009
    Messages : 152
    Par défaut
    Je savais pas...
    Merci pour l'info

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 5
    Par défaut
    Salut,
    Désolé pour ma non réponse, je n'ai plus eu le temps de travailler sur ce sujet depuis 2 semaines.

    J'ai juste pu tester model.reload(noeud). Mais ça ne fonctionne pas car dans mon cas je dois recharger la vue de l'arbre complet: ça fait exactement la même chose que model.reload() et donc ça collapse complètement l'arbre.

    Je compte creuser plutôt dans la direction de la première solution de Laurentze. Je vous tiens au jus dès que c'est fait.

    A ++

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 5
    Par défaut [Résolu] Refresh de la largeur d'un noeud
    J'ai pu tester ta solution Laurentze, ça fonctionne.

    Sur certains arbres profonds avec de nombreuses feuilles expansées, le temps de rechargement est un chouilla plus long, mais ça reste tout de même tout à fait correct.

    Merci encore.
    A ++

Discussions similaires

  1. Library tikz automata et distance en largeur entre les noeuds
    Par GDMINFO dans le forum Tableaux - Graphiques - Images - Flottants
    Réponses: 1
    Dernier message: 24/11/2010, 14h35
  2. Réponses: 3
    Dernier message: 15/01/2008, 20h31
  3. Sortir d'un progamme qui boucle ou qui refresh
    Par mikevador02 dans le forum C
    Réponses: 12
    Dernier message: 14/12/2002, 09h38
  4. Couleur des noeuds ds 1 TTreeView
    Par vincent DD dans le forum Composants VCL
    Réponses: 3
    Dernier message: 18/09/2002, 13h54
  5. [JMF][MediaPlayer] hauteur et largeur de la video
    Par mbp566 dans le forum Multimédia
    Réponses: 3
    Dernier message: 07/08/2002, 15h19

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