2016-02-16 2 views
1

J'ai une classe qui étend JPanel et implémente MouseListener. Dans cette classe, si le panneau est cliqué les deux fonctions suivantes sont exécutées:Ajouter des actions aux options JPopupMenu

@Override 
public void mouseClicked(MouseEvent e) { 
    displayExitPopup(); 
} 

private void displayExitPopup() { 
    JPopupMenu exitPopup = new JPopupMenu(); 
    exitPopup.add("Exit Game"); 
    exitPopup.add("Cancel"); 
    exitPopup.show(this, this.getWidth(), this.getHeight()); 
} 

Tout cela fonctionne très bien et la fenêtre affiche les 2 options comme il se doit.

Maintenant, je suis en train d'effectuer des actions lorsque l'une des deux options dans le menu contextuel sont cliqués - System.exit(0) si Exit Game est cliquée, et le menu contextuel pour fermer si Cancel cliquez dessus. Comment cela peut-il être fait?

Répondre

3

Si vous jetez un oeil à l'JavaDocs for JPopupMenu#add(String), vous constaterez que c'est une méthode pratique qui renvoie une JMenuItem, vous devriez alors être en mesure d'ajouter un ActionListener à elle

Jetez un oeil à Bringing up a PopupMenu pour plus de détails

cela dit, je la place, vous encourager à utiliser l'API Action qui vous permettra de créer des unités autonomes de travail, qui fournissent également les informations nécessaires pour créer le JMenuItem utilisé par le JPopupMenu

Jetez un oeil à How to Use Actions pour plus de détails

Vous devez également emploierez JComponent#setComponentPopupMenu au lieu d'essayer d'utiliser un MouseListener, comme différentes plates-formes ont des déclencheurs pour un menu contextuel et il est compliqué et laid réel rapide

2

Lorsque En ajoutant un élément à JPopupMenu, vous obtenez un JMenuItem. Sur cet objet, vous pouvez appeler addActionListener pour ajouter un écouteur d'action, comme avec un JTextField ou un JButton.

exitPopup.add("Cancel").addActionListener(e-> { 
    // do something 
});