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 :

Sélection d'un noeud après regénération de JTree


Sujet :

Composants Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2011
    Messages
    19
    Détails du profil
    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juillet 2011
    Messages : 19
    Par défaut Sélection d'un noeud après regénération de JTree
    Bonjour à tous,

    J'ai un arbre Jtree qui se regénère à des moments opportuns. Pour que l'utilisateur n'ai pas à redéployer tous les noeuds amenant à sa sélection, voilà ce que je fais:

    - sauvegarde de chemin de la sélection courante
    - regénération de l'arbre
    - si la sélection était null, on sélectionne la racine (celui là marche)
    - sinon on sélectionne et on étend le noeud parent de celui sélectionné avant regénération (Ne marche pas!!)

    Voici le code :

    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
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    	public void update(Observable obs, Object argument) {
     
    		if(obs!=null){
    			System.out.println(">>>> Path avant génération "+this.tree.getSelectionPath());
     
    			//---Récupération du chemin de l'élément sélectionné
    			TreePath tp = this.tree.getSelectionPath();
     
    			//--- Suppression de l'arbre entier
    			this.removeAll();
     
     
    			//---Regénération de l'arbre
    			AircraftModel aircraft = (AircraftModel)obs ;
    			DefaultMutableTreeNode aircraftRootNode = new DefaultMutableTreeNode(aircraft);
     
    			for(CalculatorModel calc : aircraft.getCalculatorList()){
    				DefaultMutableTreeNode calcNode = new DefaultMutableTreeNode(calc);
    				aircraftRootNode.add(calcNode);
     
    				for(StandardModel std : calc.getStdList()){
    					DefaultMutableTreeNode stdNode = new DefaultMutableTreeNode(std);
    					calcNode.add(stdNode);
     
    					for(DemandModel dmd : std.getDmdList()){
    						DefaultMutableTreeNode dmdNode = new DefaultMutableTreeNode(dmd);
    						stdNode.add(dmdNode);
    					}
    				}
    			}
    			((DefaultTreeModel)this.tree.getModel()).setRoot(aircraftRootNode);
    			((DefaultTreeModel) this.tree.getModel()).reload();
     
     
     
    			//TODO: Trouver comment étendre le parent du noeud sélectionné avant regénération de l'arbre
     
    			//---Si l'arbre avait une sélection avant génération
    			if(tp!=null){
    				System.out.println(" ----- Selection à étendre : "+ tp.getParentPath());
     
    				//on sélectionne le noeud parent puis on l'étend / [PAS OK]
    				this.tree.setSelectionPath(tp.getParentPath());
    				this.tree.expandPath(tp.getParentPath());
     
    			}else{
    				//Sinon on sélectionne la racine / [OK]
    				TreeNode n = (DefaultMutableTreeNode)this.tree.getModel().getRoot();
    				this.tree.setSelectionPath(new TreePath(n));
    			}
     
    			this.add(new JScrollPane(tree),BorderLayout.CENTER);
    			this.validate();
    			//Les boutons
     
    			panelbutton.add(move);
    			panelbutton.add(delete);
    			this.add(panelbutton, BorderLayout.SOUTH);
    		}

    Le résultat en console:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    >>>> Path avant génération [A380, FCDC_A380, F10.3 (94)]
    ----- Selection à étendre : [A380, FCDC_A380]
    Il n'y a aucune erreur (exception) mais à mon avis lors de la regénération, les objets prennent d'autres références et le treePath ne correspond plus à ces nouveaux objet, donc impossible à étendre ou sélectionner.

    Une idée pour résoudre ou contourner le pb?

    Merci beaucoup!

  2. #2
    Membre averti
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2011
    Messages
    19
    Détails du profil
    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juillet 2011
    Messages : 19
    Par défaut
    Ca ne dis rien à personne?

  3. #3
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    Tu devrais te pencher sur
    scrollPathToVisible
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. Réponses: 3
    Dernier message: 16/12/2011, 01h47
  2. Réponses: 3
    Dernier message: 11/12/2007, 12h10
  3. Sélection d'un noeud dans un treeview
    Par saphir54321 dans le forum ASP.NET
    Réponses: 3
    Dernier message: 23/04/2007, 10h54
  4. [C#]Comment forcer la sélection d'un noeud avec bouton droit
    Par irnbru dans le forum Windows Forms
    Réponses: 3
    Dernier message: 16/11/2005, 20h39
  5. [JTree]noeud parent dans un jtree
    Par wassimb dans le forum Composants
    Réponses: 5
    Dernier message: 22/03/2004, 15h06

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