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 affichage


Sujet :

Composants Java

  1. #1
    Membre du Club Avatar de Sp4ce
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 81
    Points : 67
    Points
    67
    Par défaut [JTree] Rafraichissement affichage
    Bonjour,

    j'ai un JTree qui affiche des noms , jusque là tout va bien. Seulement je passe par un petit JDialog pour changer ces noms. Quand je clique sur ok, le nom ne change pas directement, il faut que je clique sur un autrer noeud pour le voir apparaitre.

    Deuxième problème si le nouveau nom fait plus que le nombre de caractère du nom initiale, il disparait avec des petit points (alors qu'il y aurait la place de mettre ce nouveau nom s'il redimensionnait un peu la case...)

    après chaque changement j'appelle la méthode treeDidChange() mais ça change rien...

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 55
    Points : 49
    Points
    49
    Par défaut
    Pour les changements de nom, tu passe par le modèle de l'arbre lorsque tu valides ta boîte de dialogue?
    Parce qu'il me semble que c'est le meilleur moyen d'affecter la vue de l'arbre.

  3. #3
    Membre du Club Avatar de Sp4ce
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 81
    Points : 67
    Points
    67
    Par défaut
    Non je passe pas par le modele de l'arbre... en fait j'ai un object dans mon noeud dont la méthode toString() renvoie ce que je veux afficher...

    mais je vais un peu regarder dans mon modele pour voir (parce que j'en ai, j'affiche pas la même couleur de police suivant le type d'object du noeud).

    voila mon Renderer pour mon arbre... des idées ?

    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
    private class MyRenderer extends DefaultTreeCellRenderer {
    		static final long serialVersionUID = 1L;
     
    	    public MyRenderer() {
    	    }
     
    	    public Component getTreeCellRendererComponent(
    	                        JTree tree,
    	                        Object value,
    	                        boolean sel,
    	                        boolean expanded,
    	                        boolean leaf,
    	                        int row,
    	                        boolean hasFocus) {
     
    	        super.getTreeCellRendererComponent(
    	                        tree, value, sel,
    	                        expanded, leaf, row,
    	                        hasFocus);
     
    	        try {
    	        	ItemObject itemObject = (ItemObject)((DefaultMutableTreeNode)value).getUserObject();
    	        	setForeground(itemObject.getColor());
    	        } catch(ClassCastException e){
    	        	// if the exception is thrown, it means that the node is not an itemNode
    	        }
    	        return this;
    	    }
    	}

    Pour le premier problème c'est resolu (le fait que le nom change pas directement après changement, un repaint() appliqué à mon CellRenderer et c'était bon.

    Il me reste le cas du redimensionnement de la case si le nom est plus grand que l'original, je pensais faire appel à validate(); mais ça marche pas

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 55
    Points : 49
    Points
    49
    Par défaut
    Je pense pas que ce soit un problème de renderer pour afficher le changement. Toujours dans la même idée de passer par le modèle (mais c'est peut-être pas le plus simple hein), à ta place, j'ajouterai un TreeModelListener au modèle et redéfinirai la méthode treeNodesChanged(TreeModelEvent e) dans ce genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    treeNodesChanged(TreeModelEvent e){
         JTree tree = (Jtree)e.getSource;
         tree.updateUI();
    }
    à moins qu'un simple ne fonctionne, mais j'en doute.
    Si ça ne marche pas, je suis preneur de toute solution que tu auras pu trouver

  5. #5
    Membre du Club Avatar de Sp4ce
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 81
    Points : 67
    Points
    67
    Par défaut
    bien joué !!!

    un simple tree.updateUI() a suffit merci

    ps : tu peux même ne pas utiliser le repaint()

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

Discussions similaires

  1. [JTree] Rafraichissement
    Par Kyom dans le forum Composants
    Réponses: 5
    Dernier message: 12/02/2008, 18h14
  2. Réponses: 4
    Dernier message: 28/12/2007, 08h23
  3. [VBA]Rafraichissement affichage distant
    Par petitours dans le forum Access
    Réponses: 9
    Dernier message: 20/04/2007, 12h14
  4. [JTree] rafraichissement
    Par nurn dans le forum Composants
    Réponses: 12
    Dernier message: 29/07/2005, 15h41
  5. [JTree] Rafraichissement d'un JTree
    Par BermudaIonique dans le forum Composants
    Réponses: 2
    Dernier message: 18/01/2005, 17h47

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