IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Composants Java Discussion :

Menu contextuel : JPopupMenu


Sujet :

Composants Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Décembre 2002
    Messages
    152
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 152
    Par défaut Menu contextuel : JPopupMenu
    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 !

  2. #2
    Membre Expert
    Avatar de gifffftane
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 354
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 2 354
    Par défaut
    Je pense que c'est un petit peu compliqué. Je te suggère d'utiliser pour la JFrame le menu de la JFrame, comme tout le monde le comprend et fait.

    ... si tu persistes à ne pas vouloir faire comme tout le monde, tu devrais pouvoir y arriver avec le glass pane, en chopant les évènements souris à ce niveau là, en déclenchant le JPopupMenu qui convient selon le composant placé en dessous, etc.

    Il y a des explications d'un tel processus à How to Use Root Panes, c'est comme avec le petit point rouge qu'ils mettent partout.

    Et si tu veux faire tout et n'importe quoi par dessus ta JFrame oriente toi vers le JXLayer.

    Une autre approche est d'intervenir sur le système de dispatching des événements souris. C'est presque ce qu'il y a de plus simple si tu contrôles toute l'appli, sinon c'est une solution crade ; vois un exemple à Top component is capturing mouse events -- how to pass through?

  3. #3
    Membre confirmé
    Inscrit en
    Décembre 2002
    Messages
    152
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 152
    Par défaut
    Merci beaucoup pour cette réponse détaillée !!!

    Je vais regarder tout çà de plus près...

Discussions similaires

  1. [JPopupmenu] Ajouter un sous-menu à un menu contextuel
    Par GlamIS dans le forum Agents de placement/Fenêtres
    Réponses: 2
    Dernier message: 03/08/2011, 17h32
  2. TreeView et menu contextuel...
    Par agh dans le forum Composants VCL
    Réponses: 6
    Dernier message: 06/04/2009, 12h23
  3. [Plugin] Ajouter une option au menu contextuel ?
    Par relivio dans le forum Eclipse Platform
    Réponses: 2
    Dernier message: 22/03/2004, 16h18
  4. [VB6] menu contextuel dynamique
    Par da40 dans le forum VB 6 et antérieur
    Réponses: 10
    Dernier message: 15/07/2003, 11h53
  5. [VB6] menu contextuel sur clique droit souris
    Par da40 dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 08/07/2003, 11h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo