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!