Comment puis-je actualiser un JTree après avoir ajouté des nœuds au modèle sous-jacent?

Tout d'abord, permettez-moi de dire que je n'utilise pas le DefaultTreeModel. Je mets en œuvre mon propre TreeModel, donc je ne peux pas utiliser le DefaultXXX choses. Le problème est: est-ce Par le biais de certains addStuff() sont des méthodes qui mon modèle définit-je ajouter des nœuds de la structure de données sous-jacente. Je puis informer les auditeurs en appelant treeNodesChanged() à l'intérieur de la addStuff() fonction (je Sais qu'il y a treeNodesInserted méthodes, mais c'est la même chose. Il vient informe les auditeurs avec une méthode différente). Maintenant, l'un des auditeurs est une classe statique dans mon formulaire principal et ce auditeur peut dire le JTree, qui est également contenue dans mon formulaire principal, pour actualiser lui-même. Comment dois-je dire à la JTree "recharger" de certaines ou de l'ensemble de ses nœuds du modèle?

Mise à JOUR:
Trouvé ce question que, bien que pas exactement le même, il donne la réponse que je veux.

Mise à JOUR 2:
Mon problème n'était pas la façon d'informer le spectateur (JTree), mais plutôt dans ce qui doit être la jtree être rechargé après la notification du modèle.

Tout d'abord permettez-moi de dire que le seul moyen que je connaisse pour actualiser un arbre afin de refléter les changements sous-jacents, c'est d'appeler le updateUI(), ou de réutiliser le setModel() la méthode. Essentiellement, mon problème est le suivant:

Supposons que le TreeModelListener a simplement été informé (par l'entremise de la TreeModelListener API) qu'un changement a eu lieu dans le modèle. Ok, et maintenant?

J'ai ce problème parce que le JTree ne pas mettre en œuvre TreeModelListener. Afin que l'auditeur, dans ma situation, est le JTree du conteneur, ou d'une classe interne la mise en œuvre de l'Auditeur, vivant sous le même contenant que les Jtree.

Supposons donc que je suis un TreeModelListener mise en œuvre, mène une vie heureuse dans un JForm avec mon frère JTree. Soudain, ma méthode treeNodesInserted(TreeModelEvent evt) est appelée. Que dois-je faire maintenant? Si je l'appelle Jtree.updateUI() à l'intérieur de moi, puis le modèle auditeurs Liste jette ConcurrentModification Exception. Puis-je appeler quelque chose d'autre que updateUI?

J'ai essayé un certain nombre de choses, mais seulement updateUI actualisé le JTree. Donc je l'ai fait à l'extérieur de l'auditeur. À partir de la JForm, je viens d'appeler le modèle de la méthode qui modifie la undrlying structure, puis-je appeler updateUI. Pas de TreeModelListener s'habitue.

UPDATE3:
J'ai trouvé qu'il n'y sont implicites TreeModelListeners enregistré. Dans mon modèle de addTreeModelListener(TreeModelListener auditeur) j'ai mis de la mise en œuvre d'un système de débogage.ligne:

System.out.println("listener added: " + listener.getClass().getCanonicalName());

et j'ai vu cette sortie de débogage juste quand j'ai exécuté jTree.setModel(model):

auditeur ajouté: javax.swing.JTree.TreeModelHandler

auditeur ajouté: javax.swing.plaf.de base.BasicTreeUI.Gestionnaire

La ConcurrentModificationException est causée en raison d'un appel à jtree.updateUI() re registres de l'auditeur (uniquement le plaf, pas les deux) donc il est jeté quand je l'appelle updateUI à l'intérieur d'un auditeur de la notification de la boucle.
La seule manière d'actualiser l'arbre est de le faire à l'extérieur de TreeModelListener. Des commentaires ou des idées pour une meilleure solution? Ai-je raté quelque chose?

source d'informationauteur Paralife