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 :
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 :
ContextualPopupMenu contextualPopupMenu = new ContextualPopupMenu(this);
Merci d'avance pour votre aide !
Partager