114 votes

Comment créer un menu contextuel dans Java Swing ?

Je travaille sur un projet d’école et nous voulons mettre en place un menu contextuel du clic droit dans l’interface gui.

Actuellement, nous faisons quelque chose comme la création d’un `` de suite, faites un clic droit et affectant sa situation à celle de la position de la souris...

Cela semble vraiment moche et est très bogué, y a-t-il meilleur moyen d’y parvenir ? Je ne sais pas il doit y avoir.

143voto

jjnguy Points 62123

Vous êtes probablement manuellement appelant setVisible(true) sur le menu. Que peuvent causer certains méchants comportement incorrect dans le menu.

L' show(Component, int x, int x) méthode s'occupe de toutes les choses dont vous avez besoin pour arriver, en Soulignant les choses à la souris et la fermeture de la popup quand nécessaire) où l'utilisation d' setVisible(true) montre juste le menu sans ajout supplémentaire de comportement.

Faire un clic droit menu contextuel il suffit de créer un JPopupMenu.

class PopUpDemo extends JPopupMenu {
    JMenuItem anItem;
    public PopUpDemo(){
        anItem = new JMenuItem("Click Me!");
        add(anItem);
    }
}

Ensuite, tout ce que vous devez faire est d'ajouter une coutume MouseListener pour les composants que vous souhaitez le menu contextuel.

class PopClickListener extends MouseAdapter {
    public void mousePressed(MouseEvent e){
        if (e.isPopupTrigger())
            doPop(e);
    }

    public void mouseReleased(MouseEvent e){
        if (e.isPopupTrigger())
            doPop(e);
    }

    private void doPop(MouseEvent e){
        PopUpDemo menu = new PopUpDemo();
        menu.show(e.getComponent(), e.getX(), e.getY());
    }
}

// Then on your component(s)
component.addMouseListener(new PopClickListener());

Bien sûr, les tutoriels ont un peu plus approfondie explication.

Remarque: Si vous remarquez que le menu déroulant apparaissant loin de l'endroit où l'utilisateur a cliqué, essayez d'utiliser l' e.getXOnScreen() et e.getYOnScreen() méthodes pour les coordonnées x et y.

121voto

kleopatra Points 31585

Cette question est un peu vieux - ainsi que les réponses (et le tutorial ainsi)

Est l’api actuelle pour fixer un popupMenu dans Swing

De cette façon il sera montré automagiquement, tant pour les déclencheurs de souris et le clavier (ce dernier dépend LAF). De plus, il prend en charge les réutiliser le même popup entre enfants d’un conteneur. Pour activer cette fonctionnalité :

18voto

coobird Points 70356

Il y a une section sur l'éducation d'un Menu Contextuel dans la Comment Utiliser les Menus de l'article de La Java des Tutoriels qui explique comment utiliser l' JPopupMenu classe.

L'exemple de code dans le tutoriel vous montre comment ajouter des MouseListeners pour les composants qui devrait afficher un menu pop-up, et affiche le menu en conséquence.

(La méthode que vous décrivez est assez similaire à la façon dont le tutoriel présente la façon d'afficher un menu pop-up sur un composant.)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X