[Java] Jtree : récupérer le noeud qui a le focus...

Jtree : récupérer le noeud qui a le focus... [Java] - Java - Programmation

Marsh Posté le 04-01-2005 à 22:43:21    

Salut,  
Je suis débutant en java et apres pas mal de rechercher sur google et ici, je me suis décidé à poser ma question :
 
J'ai un JTree avec X noeuds dedans et en fait lorsque je clique sur un noeud je voudrais que son nom soit affiché dans un lablel.
 
donc j'ai ça :
label.setText(treeListe.        );  
 
Seulement je n'arrive pas à récupérer le noeud qui a le focus dans mon treeListe, alors si quelqu'un pouvait m'aider, merci !  :sarcastic:

Reply

Marsh Posté le 04-01-2005 à 22:43:21   

Reply

Marsh Posté le 05-01-2005 à 11:19:31    

apprends que le jdk possède une javadoc ;)
http://java.sun.com/j2se/1.5.0/doc [...] ionPath())


Message édité par bobuse le 05-01-2005 à 11:19:52
Reply

Marsh Posté le 05-01-2005 à 19:35:11    

merci pour l'info mais j'avais deja vu cette page et je n'arrive pas à trouver, j'ai essayé une dizaine de choses mais je n'arrive toujours pas a savoir comment avoir le noeud qui a le focus....

Reply

Marsh Posté le 05-01-2005 à 19:46:10    

voilà un bout de code déterré :

Code :
  1. public void valueChanged(TreeSelectionEvent e) {
  2.         DefaultMutableTreeNode node = (DefaultMutableTreeNode)tree.getLastSelectedPathComponent();
  3.         if (node == null)
  4.             return;
  5.         Object nodeInfo = node.getUserObject();
  6. //...


 
En espérant que ça puisse t'aider

Reply

Marsh Posté le 05-01-2005 à 20:47:06    

.getLastSelectedPathComponent, je peux pas mettre ça derriere mon treeListe. il y a une erreur de compil (je suis sur NetBeans IDE)

Reply

Marsh Posté le 05-01-2005 à 20:55:10    

je connais rien aux Jtree, mais je vais sur la javadoc de JTree
http://java.sun.com/j2se/1.5.0/doc [...] JTree.html
 
je tombe sur le lien vers le tutorial  
http://java.sun.com/docs/books/tut [...] /tree.html
 
je vois un sommaire avec dedans "Responding to Node Selection"
http://java.sun.com/docs/books/tut [...] tml#select
 
et je vois :  

Code :
  1. DefaultMutableTreeNode node = (DefaultMutableTreeNode)
  2.                        tree.getLastSelectedPathComponent();
  3.     if (node == null) return;
  4.     Object nodeInfo = node.getUserObject();
  5.     if (node.isLeaf()) {
  6.         BookInfo book = (BookInfo)nodeInfo;
  7.         displayURL(book.bookURL);
  8.     } else {
  9.         displayURL(helpURL);
  10.     }


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 05-01-2005 à 21:52:35    

tu veux que ce soit le fait d'être sélectionné qui provoque l'affichage du noeud dans le JLabel ? ou simplement le clic ?
 
si c'est le clic ->  
monArbre.addMouseListenener( <blabla> ) avec un code qui va chercher le lieu (x,y) du clic dans le MouseEvent et avec getClosestPathForLocation(int, int), tu va rechercher la cellule du tableau.
 
si c'est la sélection ->
monArbre.getSelectionModel.addTreeSelectionListener(<blabla> )
dans le blabla tu recevras un TreeSelectionEvent dans lequel tu vas aller chercher le getNewLeadSelectionPath() sur lequel tu vas prendre le getLastPathComponent().
C'est un peu le bordel, mais c'est parce que suivant comment est configuré ton TreeSelectionModel, tu peux sélectionner plusieurs noeuds à la fois (avec CTRL ou SHIFT). comme tu n'as qu'un seul label, tu ne peux y mettre que le "meneur" de la sélection, celui qui en général a un cadre noir autour en plus d'être sur fond bleu.

Reply

Marsh Posté le 05-01-2005 à 21:55:51    

ah oui, la différence : a-priori, je suppose que c'est la sélection que tu veux afficher pour signifier à l'utilisateur qu'il va faire un traitement dessus. faire sur les évènements de sélection permet de lui laisser le choix de faire sa sélection au clavier, sur un écran tactile ou avec des truc louches pour handicapés.

Reply

Marsh Posté le 06-01-2005 à 14:15:14    

nraynaud a écrit :


si c'est la sélection ->
monArbre.getSelectionModel.addTreeSelectionListener(<blabla> )
dans le blabla tu recevras un TreeSelectionEvent dans lequel tu vas aller chercher le getNewLeadSelectionPath() sur lequel tu vas prendre le getLastPathComponent().


 
Oui j'essaye de faire ça mais quand tu me parle du blabla la comment ça marche ??
Parce que moi dans la parenthèse il me dit que ça doit etre un TreeSelectionListener apparement....
 
J'ai ça en fait :
 treeListeStats.getSelectionModel().addTreeSelectionListener(.....);
alors que mettre dans les (....) ?
merci pour votre aide !


Message édité par ham_mer le 06-01-2005 à 14:16:54
Reply

Marsh Posté le 07-01-2005 à 15:12:26    

Code :
  1. treeListeStats.getSelectionModel().addTreeSelectionListener(new TreeSelectionListener() {
  2.   public void valueChanged(TreeSelectionEvent e) {
  3.     label.setText(e.getNewLeadSelectionPath().getLastPathComponent().toString());
  4. });


 
(oui je pourrais me faire TT pour ça mais je m'en fout, j'ai bien picolé au resto)

Reply

Marsh Posté le 07-01-2005 à 15:12:26   

Reply

Marsh Posté le 07-01-2005 à 15:13:25    

nraynaud a écrit :


(oui je pourrais me faire TT pour ça mais je m'en fout, j'ai bien picolé au resto)


 :??:


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 07-01-2005 à 15:17:33    

travail maché, tout ça ...

Reply

Marsh Posté le 07-01-2005 à 15:19:10    

nraynaud a écrit :

travail maché, tout ça ...


bha c'est pas grave : les liens permettant de trouver tout seul ont déjà été donnés ...


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 07-01-2005 à 19:12:49    

nraynaud a écrit :

Code :
  1. treeListeStats.getSelectionModel().addTreeSelectionListener(new TreeSelectionListener() {
  2.   public void valueChanged(TreeSelectionEvent e) {
  3.     label.setText(e.getNewLeadSelectionPath().getLastPathComponent().toString());
  4. });




 
OK merci beaucoup pour la réponse !
Je pense avoir compris le fonctionnement mais alors tes accolades je ne les comprend pas  :cry: ...
D'apres ce que je pense avoir compris, tu récupère un treeSelectionListener qui est en fait l'élément séléctionné dans mon Jtree et ensuite tu t'en sert afficher son non dans le lable ??  :heink:


Message édité par ham_mer le 07-01-2005 à 19:17:38
Reply

Marsh Posté le 07-01-2005 à 19:20:58    

ham_mer a écrit :

OK merci beaucoup pour la réponse !
Je pense avoir compris le fonctionnement mais alors tes accolades je ne les comprend pas  :cry: ...
D'apres ce que je pense avoir compris, tu récupère un treeSelectionListener qui est en fait l'élément séléctionné dans mon Jtree et ensuite tu t'en sert afficher son non dans le lable ??  :heink:


c'est parce c'est une classe incluse, c'est très troublant en effet au début :)

Reply

Marsh Posté le 07-01-2005 à 19:22:31    

elle est anonyme en plus ...


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 07-01-2005 à 19:26:35    

Merci mais je ne comprend par toutes ces accolades ! (et oui j'ai du mal la!)

Reply

Marsh Posté le 07-01-2005 à 19:32:45    

benou a écrit :

elle est anonyme en plus ...


oui anonyme en plus, j'ai pas voulu l'accabler :D

Reply

Marsh Posté le 07-01-2005 à 19:42:19    

merci les gars :D
Je sais, je sais, je n'ai aucun mérite, vous m'avez filé la solution, je l'ai la sous les yeux, mais ça ne veut pas compiler.
 
Est ce que le code serait plutot comme ça :  
    treeListeStats.getSelectionModel().addTreeSelectionListener(new TreeSelectionListener() {
 
    public void valueChanged(TreeSelectionEvent e)  
    {
          label1.setText(e.getNewLeadSelectionPath().getLastPathComponent().toString());
     }
};
 
???
 
MERCI !!!!


Message édité par ham_mer le 08-01-2005 à 19:09:47
Reply

Marsh Posté le 08-01-2005 à 19:12:39    

Help please :D !

Reply

Marsh Posté le 08-01-2005 à 19:33:26    

help quoi ?
t'as encore un problème ? lequel ?


---------------
ma vie, mon oeuvre - HomePlayer
Reply

Marsh Posté le 08-01-2005 à 21:07:25    

lol, nan ça va en fait mais je pense que ça vient plutot d'un probleme de librairies non installées dans Netbeans.
Merci pour votre aide

Reply

Marsh Posté le 08-01-2005 à 21:34:15    

finalement j'ai inclu les biblio et j'ai fait ça :
 
 treeListeStats.addTreeSelectionListener(
         new TreeSelectionListener() {
           public void valueChanged(TreeSelectionEvent e) {
           label2.setText(e.getNewLeadSelectionPath().getLastPathComponent().toString());
           }
         }          
      );  
 
ça marche alors merci !

Reply

Marsh Posté le 08-01-2005 à 21:48:15    

Encore une petite question, est ce qu'il y a moyen de récupérer le niveau d'un noeud dans la hiérachie de l'arbre, par exemple pour les premiers noeuds ça serait 0, les noeuds fils 1, les petits fils 2 etc.... ??? merci !

Reply

Marsh Posté le 09-01-2005 à 22:14:32    

non, il faut parcourir un treepath en maintenant un compteur toi-même.

Reply

Marsh Posté le 11-01-2005 à 00:12:26    

Un derniere question :
 
2005
  |--janvier
        |--12
 
Imaginons que le 12 soit séléctionné, je veux en fait afficher dans mon label : 12 janvier 2005, donc récupérer le TreePath si j'ai bien compri.
 
Seulement, avec la méthode je n'arrive pas a accéder au Path du "e" vu que ce n'est pas un noeud, alors comment convertir le "e" en noeud pour pouvoir récupérer son Treepath ??

Reply

Marsh Posté le 11-01-2005 à 00:26:01    

Reply

Marsh Posté le 11-01-2005 à 13:14:07    

nraynaud a écrit :

ah oui, la différence : a-priori, je suppose que c'est la sélection que tu veux afficher pour signifier à l'utilisateur qu'il va faire un traitement dessus. faire sur les évènements de sélection permet de lui laisser le choix de faire sa sélection au clavier, sur un écran tactile ou avec des truc louches pour handicapés.


sur le fond des choses, c'est pas top comme réflexion :/
 
mais soit. c'est pas le but du topic.


---------------
As the plane took off, the pilot turned to the co-pilot and said, “Have you ever flown solo?” Co-pilot: No. Typically I fly much higher than this.
Reply

Marsh Posté le 12-01-2005 à 08:39:22    

TBone > explique ?

Reply

Marsh Posté le 12-01-2005 à 12:47:59    

je trouvais juste que l'adjectif "louche" n'était pas des plus heureux dans "avec des trucs louches pour handicapés".


---------------
As the plane took off, the pilot turned to the co-pilot and said, “Have you ever flown solo?” Co-pilot: No. Typically I fly much higher than this.
Reply

Marsh Posté le 12-01-2005 à 12:56:37    

TBone a écrit :

je trouvais juste que l'adjectif "louche" n'était pas des plus heureux dans "avec des trucs louches pour handicapés".


ils ont des appareils des plus inimaginables pur accéder à l'informatique.

Reply

Marsh Posté le 12-01-2005 à 13:01:23    

dans ce cas je comprends mieux ta phrase, pas de soucis :)


---------------
As the plane took off, the pilot turned to the co-pilot and said, “Have you ever flown solo?” Co-pilot: No. Typically I fly much higher than this.
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed