2012-01-13 8 views
1

J'ai écrit du code pour effectuer un événement click sur JMenuItem mais cela ne déclenche pas lorsque je débogue. (Je sais que je ne suis pas censé poser ces questions dans ce forum mais je suis nouveau sur ce forum)JMenuitem - cliquez sur - action - Java

public class ClsMenu extends JMenuItem implements ActionListener { 

    JTextArea output; 
    JScrollPane scrollPane; 

    public ClsMenu(String text) 
    { 
    super(text); 
    addActionListener(this); 
    } 

    public JMenuBar createMenu() 
    { 
    JMenuBar menuBar; 
    JMenu menuFood,menuDrinks,menuParty; 
    JMenuItem foodItem; 


    menuBar=new JMenuBar(); 


    menuFood=new JMenu("Food"); 
    foodItem=new JMenuItem("Pizza"); 
    menuFood.add(foodItem); 
    menuBar.add(menuFood); 
    return menuBar; 
    } 
    public void createGUIandShow() 
    { 
    JFrame frame = new JFrame("Restuarant"); 
    frame.setJMenuBar(createMenu()); 
    } 

    public void actionPerformed(ActionEvent e) { 
    // TODO Auto-generated method stub 
    System.out.println("item clicked"+e.getActionCommand()); 
    } 
} 

Dans cet appel, j'ai créé un objet

public class ClsMenuDisp { 
    public static void main(String[] args) { 
    // TODO Auto-generated method stub 

    ClsMenu menu=new ClsMenu("testitem"); 
    menu.createGUIandShow(); 
    } 
} 
+1

Les objets GUI Swing doivent être construits et manipulés _only_ sur le [thread d'envoi d'événement] (http://download.oracle.com/javase/tutorial/uiswing/concurrency/initial.html). – trashgod

+0

Notez que tous les concreate JSomething sont destinés à _using_ (vs extension). Ou l'inverse: si vous vous voyez les étendre, il y a une forte probabilité que vous fassiez quelque chose de mal ;-) – kleopatra

Répondre

2

Vous devez ajouter votre ActionListener aux éléments de menu que vous ajoutez le JMenu. Ce que vous faites est de faire un élément de menu qui a un écouteur d'action. Ensuite, en utilisant une méthode d'instance de cet élément de menu pour créer un JMenuBar/JMenu/JMenuItem complètement indépendant qui est ensuite attaché au JFrame.

2

Votre classe ClsMenu implémente ActionListener, mais ce n'est pas en implémentant une telle interface que vous recevrez automatiquement des événements.

Vous devez ajouter votre ActionListener à l'objet qui vous intéresse, afin que cet objet sache qu'il doit avertir l'auditeur au moment approprié. Dans votre cas, vous êtes intéressé par le menu, vous devez donc ajouter votre écouteur.

Quelques liens de référence:

  1. Le tutoriel Swing about menus
  2. Le Observer design pattern, qui est ce que vous utilisez lors de l'ajout d'auditeurs
  3. How to write an ActionListener tutoriel
2

J'écris un code cela peut être utile pour vous de voir comme exemple: lien here.

Il ya aussi un bon tutoriel here, sur lequel j'ai basé mon code.

Questions connexes