Rechercher : dans
Par :

[Java] capturer click droit sur JTree

Dernière réponse le 7 jan 2009 à 16:13:13 Florian, le 13 fév 2005 à 18:03:49 
 Signaler ce message aux modérateurs

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.

Meilleures réponses pour « [Java] capturer click droit sur JTree » dans :
Plantage d'Explorer.exe après un clic droit VoirExplorer.exe se bloque lors d'un clic droit sur le Bureau Préambule Configuration à problèmes ? Résolution du problème Origine matérielle Origine logicielle Préambule Lors d'un clic-droit, par exemple sur le Bureau ou dans...
Javascript - Interdire le clic droit de la souris VoirIl est possible d'empêcher que votre visiteur effectue un clic droit sur votre page. Ceci permet une protection relative de vote code source et de vos photos. Placez ce script entre les balises et de votre code HTML :

1

choubaka, le 13 fév 2005 à 19:56:41

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/Mouse­Event.html
Chouba,
Pochard d'assaut .. 

Répondre à choubaka

2

Florian, le 14 fév 2005 à 15:23:57

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?

Répondre à Florian

3

Ermelin, le 23 avr 2007 à 10:22:23

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());
}

Répondre à Ermelin

4

Ermelin, le 23 avr 2007 à 16:46:02

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

Répondre à Ermelin

5

imen, le 1 aoû 2008 à 16:39:17

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

Répondre à imen

6

 tom, le 7 jan 2009 à 16:13:13

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...

Répondre à tom