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.