Bonjour à tous !

Je souhaite ajouter un menu contextuel à mon application.

Je sais déjà ajouter un menu contextuel à un composant (par exemple un JTextArea).

Par contre, lorsque j'ajoute un menu contextuel à la JFrame principale de mon programme, celui-ci s'affiche uniquement lorsque je clique droit sur la JFrame. Ce que j'aimerai, c'est qu'il s'affiche n'importe où dans l'application, c'est à dire sur tous les composants inclus dans la JFrame.

Voici mon code :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
public class ContextualPopupMenu {
 
	private JFrame jFrame;
 
	private JPopupMenu popupMenu;
 
	/**
         * Constructeur
         */
	public ContextualPopupMenu(JFrame jFrame) {
 
		this.jFrame = jFrame;
 
		// Création du menu contextuel
		createPopupMenu();
	}
 
	/**
         * Ajout d'un JPopupMenu avec les actions Couper, Copier, Coller
         * 
         * @return
         */
	private void createPopupMenu() {
 
		popupMenu = new JPopupMenu();
 
		// Couper
		ImageIcon cutIcon = new ImageIcon(getClass().getClassLoader().getResource("gfx/cut.png"));
		JMenuItem cutMenuItem = new JMenuItem("Couper", cutIcon);
		// cutMenuItem.addActionListener(this);
		popupMenu.add(cutMenuItem);
 
		// Copier
		ImageIcon copyIcon = new ImageIcon(getClass().getClassLoader().getResource("gfx/copy.png"));
		JMenuItem copyMenuItem = new JMenuItem("Copier", copyIcon);
		popupMenu.add(copyMenuItem);
 
		// Coller
		ImageIcon pasteIcon = new ImageIcon(getClass().getClassLoader().getResource("gfx/paste.png"));
		JMenuItem pasteMenuItem = new JMenuItem("Coller", pasteIcon);
		popupMenu.add(pasteMenuItem);
 
		MouseListener popupListener = new PopupListener();
 
		this.jFrame.addMouseListener(popupListener);
	}
 
	/**
         * Gestion des actions sur le JPopupMenu
         *
         */
	class PopupListener extends MouseAdapter {
 
		public void mousePressed(MouseEvent e) {
 
			maybeShowPopup(e);
		}
 
		public void mouseReleased(MouseEvent e) {
 
			maybeShowPopup(e);
		}
 
		private void maybeShowPopup(MouseEvent e) {
 
			if (e.isPopupTrigger()) {
 
				System.out.println(e.getComponent() + "\t" + e.getX() + "\t" + e.getY());
 
				popupMenu.show(e.getComponent(), e.getX(), e.getY());
			}
		}
	}
 
}
Que j'appelle de cette manière depuis ma JFrame :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
ContextualPopupMenu contextualPopupMenu = new ContextualPopupMenu(this);
Merci d'avance pour votre aide !