OVH Cloud OVH Cloud

Problème avec JTree

1 réponse
Avatar
Chris
Bonjour,
je suis débutant avec les GUI en Java et pour me familiariser à Swing, j'ai
réalisé une petite appli basée sur JFrame qui affiche dans un SplitPane, un
JTree à gauche, et un panel avec du texte à droite. Ca marche au poil :
quand je sélectionne un élément de l'arbre à gauche, je modifie ce qui est
affiché à droite. Bref c'est à peu près comme dans le tutorial Swing.
Maintenant problème, je veux avoir le même résultat mais en faisant 3
classes : une pour la frame qui contient le SplitPane, une qui contient le
JTree et tous ses attributs, et une pour le panel qui affiche le texte :
J'arrive à instancier mon JTtree et à le caser à gauche du SplitPane, mais
l'appli ne répond plus aux sélections des éléments dans l'arbre et
n'instancie jamais la classe qui doit afficher le texte.
J'ai surement un problème avec le TreeSelectionListener mais tout ce que
j'essaie ne donne rien.
Si mon diagnostic est correct ma question est : comment coder le
TreeSelectionListener de la classe 'Arbre' pour que l'appli 'Frenetre'
puisse instancier la classe 'Texte à droite' et l'afficher à sa place quand
une sélection est faite dans l'arbre ?

Si quelqu'un a une piste, je l'en remercie.

Christophe

1 réponse

Avatar
Olivier Prin
On peut procéder de 2 manières.

La première en faisant ce que tu demandes à la lettre mais il faut que
le JTree connaisse la JFrame et appelle une méthode de cette dernière
pour qu'elle puisse créer la partie de droite. Les évènements de
sélection dans l'arbre sont gérés dans l'arbre comme précisé dans la
question.

La deuxième que je préfère pour sa souplesse consiste à ajouter ton
appli fenêtre en listener de ton arbre (via un addTreeSelectionListener
sans doute, j'ai pas la javadoc sous les yeux). Ta fenêtre implémente
l'interface TreeSelectionListener et doit définir la méthode
valueChanged (de tête). C'est toujours ta fenêtre qui créée la partie de
droite sauf que l'évènement n'est pas géré au niveau de ton arbre.
L'avantage c'est que tes classes n'ont pas à trainer des références
entre elles.

Olivier

Chris wrote:
Bonjour,
je suis débutant avec les GUI en Java et pour me familiariser à Swing, j'ai
réalisé une petite appli basée sur JFrame qui affiche dans un SplitPane, un
JTree à gauche, et un panel avec du texte à droite. Ca marche au poil :
quand je sélectionne un élément de l'arbre à gauche, je modifie ce qui est
affiché à droite. Bref c'est à peu près comme dans le tutorial Swing.
Maintenant problème, je veux avoir le même résultat mais en faisant 3
classes : une pour la frame qui contient le SplitPane, une qui contient le
JTree et tous ses attributs, et une pour le panel qui affiche le texte :
J'arrive à instancier mon JTtree et à le caser à gauche du SplitPane, mais
l'appli ne répond plus aux sélections des éléments dans l'arbre et
n'instancie jamais la classe qui doit afficher le texte.
J'ai surement un problème avec le TreeSelectionListener mais tout ce que
j'essaie ne donne rien.
Si mon diagnostic est correct ma question est : comment coder le
TreeSelectionListener de la classe 'Arbre' pour que l'appli 'Frenetre'
puisse instancier la classe 'Texte à droite' et l'afficher à sa place quand
une sélection est faite dans l'arbre ?

Si quelqu'un a une piste, je l'en remercie.

Christophe