2010-08-11 8 views
3
Java-

J'ai un JTree que j'utilise pour afficher certains (sans surprise) des données hiérarchiques. Une partie de la spécification est que l'utilisateur peut changer la source de données (atm c'est juste entre les fichiers). Maintenant, quand cela arrive, je peux reconstruire les données et les nœuds de l'arbre sans problème. Mais, j'ai beaucoup de difficultés à obtenir l'arbre pour mettre à jour les changements. J'ai essayé de le retirer de son scrollpane et de le remplacer par un nouveau JTree, mais je n'en ai vu aucun. J'ai essayé de tout retirer du JTree et je n'ai vu aucun effet.mise à jour DTree

Comment puis-je faire les changements d'affichage DTree après qu'il a été construit?
Ninjedit: Oui, j'ai appelé updateUI().

Une autre édition: Je voulais aussi remplacer les données actuelles de l'arbre avec mes nouvelles données. Cependant, je ne vois aucune méthode qui prendra le DefaultMutableTreeNode avec lequel j'ai construit. Même si je supprime juste le JTree et appelle updateUI sur s'il contient ScrollPane, rien ne se passe. Ou si j'utilise repaint à la place.

+0

Comment vous créer JTree? –

+0

En construisant les nœuds, puis en créant le JTree directement à partir d'eux. – Puppy

+1

updateUI() est pour changer l'apparence et la sensation à la volée et n'a rien à faire avec repeindre un composant. – fasseg

Répondre

5

Il se pourrait que les événements appropriés (les événements internes JTree) ne sont pas tirés. Par exemple, vous pouvez ajouter des nœuds en utilisant node.add(...) ou mieux, model.insertNodeInto(...) (en supposant que vous utilisez le DefaultTreeModel). Dans ce cas, la dernière méthode est préférée car elle déclenchera des événements appropriés qui provoqueront la mise à jour correcte de la vue (le JTree). Il est possible que votre problème ne consiste pas à redessiner l'interface utilisateur, mais en notifiant la vue que le modèle a changé.
Donc, je suggère de regarder comment vous modifiez dynamiquement votre JTree, et si possible, je suggère d'utiliser le DefaultTreeModel comme modèle pour conduire la vue.

Et juste pour vous assurer que vous avez lu the Sun JTree tutorials, non?

+0

Il s'avère que le defaultTreeModel contenait toutes les fonctions dont j'avais besoin. Le JTree n'a pas fourni de méthodes utiles pour les atteindre. Une fois que j'ai fait le JTree à partir d'un modèle et attrapé le modèle, tout était facile. – Puppy

+0

Excellent! C'est payant d'être modelé. –