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 :

améliorer le Reload des JTree


Sujet :

Composants Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    127
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 127
    Par défaut améliorer le Reload des JTree
    Dans mon application, j'ai développé un JTree et j'y ai incorporé un bouton qui permet de réactualiser l'arbre. Pour simplifier j'ai utilisé un DefaultTreeModel ce qui me donne accès à la commande Reload() qui permet de recharger tout l'arbre.

    Mon problème : quand j'ai ouvert un (ou plusieurs noeuds) et que je fais une actualisation de l'arbre, tous mes noeuds se referment. Comment faire pour que ces noeuds ne se referment pas à chaque fois que je réactualise ???

  2. #2
    Membre Expert
    Avatar de natha
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 346
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 346
    Par défaut
    Il faut stoquer les paths ouverts et les remettre.

    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
    31
    32
    33
    34
    35
    36
    37
    38
    	/**
             * Get a copy of the list of expanded tree paths of a tree.
             * 
             * @param tree The JTree to copy
             * @return The expanded tree paths
             */
    	public static TreePath[] getExpandedPaths(JTree tree) {
    		List<TreePath> expandedPaths = new ArrayList<TreePath>();
    		TreePath rootPath = new TreePath(tree.getModel().getRoot());
    		Enumeration<TreePath> en = tree.getExpandedDescendants(rootPath);
    		if (en != null) {
    			while (en.hasMoreElements()) {
    				expandedPaths.add(en.nextElement());
    			}
    		}
    		TreePath[] array = new TreePath[expandedPaths.size()];
    		expandedPaths.toArray(array);
    		return array;
    	}
     
    	/**
             * Expand all the previously remembered expanded paths.
             * 
             * @param tree
             * @param expandedPaths
             */
    	public static void setExpandedPaths(JTree tree, TreePath[] expandedPaths) {
    		if (expandedPaths == null) {
    			return;
    		}
    		for (int i = 0; i < expandedPaths.length; ++i) {
    			TreePath oldPath = expandedPaths[i];
    			TreePath newPath = searchPath(tree.getModel(), oldPath);
    			if (newPath != null) {
    				tree.expandPath(newPath);
    			}
    		}
    	}

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    127
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 127
    Par défaut
    J'essayais justement d'impléménter une méthode dans ce style ...
    Dans ton morceau de code, la fonction searchPath() est inconnue. S'agit-il d'une fonction supplémentaire ???

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    127
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 127
    Par défaut
    j'ai trouvé la fonction searchPath() sur Google-Labs dont voici le code pour ceux que ça intéresse (le code marche)
    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
    31
    32
    33
    34
        private static TreePath searchPath(TreeModel model, TreePath oldPath) {
            Object treenode = model.getRoot();
            Object[] oldPathNodes = oldPath.getPath();
            TreePath newPath = new TreePath(treenode);
     
            for(int i=0; i<oldPathNodes.length; i++) {
                Object oldPathNode = oldPathNodes[i];
                if(treenode.toString().equals(oldPathNode.toString())) {
                    if(i == oldPathNodes.length - 1)
                        return newPath;
                    else {
                        if(model.isLeaf(treenode))
                            return null; // not found
                        else {
                            int count = model.getChildCount(treenode);
                            boolean foundChild = false;
     
                            for(int j=0; j<count; j++) {
                                Object child = model.getChild(treenode, j);
                                if(child.toString().equals(oldPathNodes[i + 1].toString()))	{
                                    newPath = newPath.pathByAddingChild(child);
                                    treenode = child;
                                    foundChild = true;
                                    break;
                                }
                            }
                            if(!foundChild)
                                return null;                                        // noeud non trouvé
                        }
                    }
                }
            }
            return null;
        }

  5. #5
    Membre Expert
    Avatar de natha
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 346
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 346
    Par défaut
    Ah oui pardon, j'ai oublié de te la copier/coller...

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

Discussions similaires

  1. Améliorer la table des matières
    Par Holomorph dans le forum Mise en forme
    Réponses: 1
    Dernier message: 14/04/2008, 10h27
  2. utilisation des JTree avec netbeans
    Par mateuil dans le forum NetBeans
    Réponses: 3
    Dernier message: 08/11/2007, 10h41
  3. Réponses: 2
    Dernier message: 12/12/2006, 16h33
  4. Comment améliorer l'affichage des icones
    Par pierrot67 dans le forum Delphi
    Réponses: 2
    Dernier message: 30/10/2006, 10h31
  5. [WinForms]Améliorer le design des appli windows ?
    Par annalady dans le forum Général Dotnet
    Réponses: 6
    Dernier message: 29/11/2005, 14h19

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