la mise à jour de JTree en java GUI
J'ai utilisé un JTree dans mon interface graphique et de l'ajouter à une JFrame. Lorsque je veux mettre à jour et de les modifier de nœuds dans une autre partie de mon programme (alors que le programme est en cours d'exécution, comme une action effectuée) j'essaie d'ajouter de nouveaux nœuds, ou de supprimer des nœuds; Mais mon interface ne change pas. Merci de me suggérer une solution.
ce qui concerne
OriginalL'auteur sajad | 2010-09-29
Vous devez vous connecter pour publier un commentaire.
En plus de la insertNodeInto suggestion, vous pouvez également utiliser:
Cela fonctionne, mais est une "force brute" pour le traitement des grands arbres. Par exemple, si j'étais à la boucle et à ajouter 1000 nœuds d'un arbre contenant déjà de 50 000 articles, ce serait très inefficace.
Dans la nature, combien de fois ne l'arbre d'obtenir suffisamment importante pour que cela devient assez lent à s'inquiéter?
OriginalL'auteur camickr
Vous devez vous assurer que, après la mise à jour de votre modèle, vous demandez à déclencher un événement à cause des auditeurs à être informés de l'événement. L'un des auditeurs sera le
JTree
et, après avoir reçu le cas, il va repeindre.Par exemple,
DefaultTreeModel
contient les méthodes:nodeChanged
nodesChanged
nodeStructureChanged
nodesWereInserted
nodesWereRemoved
Aussi, comme avec tous les Swing de programmation, vous devez vous assurer de la mise à jour de votre modèle sur la Event Dispatch Thread.
insertNodeInto
méthode, par exemple, et de laisser le modèle de prendre soin de déclencher des événements de la TreeModelListeners.Bon point, bien que, dans certains cas, il serait préférable de le gérer vous-même. Par exemple, si je voulais ajouter 1000 nœuds enfants je ne voudrais pas le feu 1000 "nœuds ont été ajoutés" des événements.
Merci Monsieur! Mais ces méthodes que vous avez mentionnés sont privées et n'a pas pu être consulté.
Vous avez tout à fait raison! J'ai changé ma réponse pour refléter le bon public méthodes que vous devez appeler.
OriginalL'auteur Adamski
Entendez-vous le GUI aspect n'est tout simplement pas montrer votre changement? Vous devriez probablement regarder int
repaint()
etrevalidate().
Voici une bonne description d'appel.
-1, Pas de repaint() et revalidate() ne sont pas nécessaires. Lorsque vous udpate le modèle le modèle est chargé de notifier à la vue de la modifier afin de l'arbre peut se repeindre.
OriginalL'auteur Bryan