[Java] capturer click droit sur JTree

Fermé
Florian - 13 févr. 2005 à 18:03
 chaofa - 18 janv. 2011 à 01:44
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

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 39426 Date d'inscription jeudi 4 avril 2002 Statut Modérateur Dernière intervention 28 avril 2025 2 104
13 févr. 2005 à 19:56
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
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
23 avril 2007 à 10:22
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
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
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
merci, ça maarche.
0