[Java] capturer click droit sur JTree

Florian -  
 chaofa -
Salut à tous, je cherche à capturer un click droit sur un JTree, afin d'afficher un menu contextuel correspondant au noeud cliqué. Je n'arrive pas à trouver dans les sources de la JVM l'endroit où le click gauche qui sélectionne les noeuds est capturé. Merci à tous.
A voir également:

3 réponses

Ermelin
 
J'ai une meilleur solution, beaucoup plus simple ... OUF
<pre>
private void addMyRightListener(final JTree tree) {
MouseListener ml = new MouseAdapter() {
public void mousePressed(MouseEvent e) {
if (e.getButton() == MouseEvent.BUTTON3) {
// System.out.println("click Right");
int selRow = tree.getRowForLocation(e.getX(), e.getY());
TreePath selPath = tree.getPathForLocation(e.getX(), e.getY());
if (selRow != -1) {
tree.clearSelection();
tree.setSelectionPath(selPath);
DefaultMutableTreeNode node = (DefaultMutableTreeNode) jTree.getLastSelectedPathComponent();
// System.out.println("Objet : "+node.getUserObject());
// Affichage du popup adéquat
}
}
}
};
tree.addMouseListener(ml);
}
</pre>

désolé pour l'allignement !!!!

Ermelin
2
choubaka Messages postés 5526 Date d'inscription   Statut Modérateur Dernière intervention   2 106
 
Salut

Toi utliser dans tes listeners, un MouseAdapter qui utilise les MouseEvent

http://java.sun.com/j2se/1.4.2/docs/api/java/awt/event/MouseEvent.html
0
Florian
 
Le problème est que ce ne sont pas les "DefaultMutableTreeNode" (DMTN) mais le JTree qui reçoit l'event, d'où l'impossibilité, par clic droit, de savoir quelle est le noeud, ou la feuille sur laquelle le clic droit est fait. Les DMTN extends JLabel, qui lui ne peut recevoir aucun event de la part de la souris.
J'arrive à capturer le clic droit sur le JTree, mais après? comment récupérer le DMTN sur lequel porte le clic?
0
Ermelin > Florian
 
Dans votre Listener :

1. envoyer un clic gauche (modifier juste l'event) et laisser faire le listener par default en cas de click gauche (Votre listener ne doit réagir qu'au click droit)

2. récupération de l'élément sélectionné

3. affichage de votre popup en fonction de l'objet trouvé

Voici pour le point 2

public Object getSelectedObject() {
DefaultMutableTreeNode node = (DefaultMutableTreeNode) votreJTree.getLastSelectedPathComponent();
return (node == null ? null : node.getUserObject());
}
0
imen
 
Salut,

j'ai utilisé votre méthode et ça marche tres bien!
je vous remercie beaucoup, c'est ce que je cherché depuis quelques temps
merci beaucoup

j'ai juste une uatre question à propos de Jtree!

je réalise une application pour composer des web services alors l'user sélectionne un ensemble de services web, apres je les affiche dans un jtree pour les détailler, operations, entrés et sorties...

je voudrais personnaliser les icones des noeuds spécifiques, une icone pour service web une autre pour tt les entrées...
et type de données...
avec cellRedendrer je n'ai pu que modifier les icones des noeuds fermants, ouvrants et feuilles,
pouvez vous m'aider s'il vous plait!!!
merci beaucoup
0
tom
 
Je vois que la réponse a etait trouvé... mais moi j'ai un autre probleme. Lors de l'affichage du popup il me met "parent is null" en utilisant la fonction show(component, x, y). En fait je ne sais pas quoi mettre pour le component...
0
chaofa
 
merci, ça maarche.
0