2012-01-13 2 views
1

Я написал код, чтобы выполнить событие click на JMenuItem, но это не срабатывает, когда я отлаживаю. (Я знаю, что я не должен задавать эти вопросы в этом форуме, но я новичок в этом форуме)JMenuitem - click - 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()); 
    } 
} 

В этом вызове, я создал объект

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

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

Объекты Swing GUI должны быть сконструированы и обработаны _only_ в [потоке отправки событий] (http://download.oracle.com/javase/tutorial/uiswing/concurrency/initial.html). – trashgod

+0

Обратите внимание, что все несоответствующие JSomething предназначены для _using_ (vs. extend). Или наоборот: если вы видите, что они расширяют их, существует высокая вероятность того, что вы сделаете что-то не так ;-) – kleopatra

ответ

2

Вы должны добавить ваш ActionListener в пункты меню, которые вы добавляете JMenu. То, что вы делаете, - это пункт меню, в котором есть прослушиватель действий. Затем используйте метод экземпляра этого пункта меню, чтобы создать полностью несвязанный JMenuBar/JMenu/JMenuItem, который затем прикрепляется к JFrame.

2

Ваш класс ClsMenu реализует ActionListener, но не реализуя такой интерфейс, вы автоматически получаете события.

Вы должны добавить свой ActionListener к интересующему вас объекту, чтобы этот объект знал, что он должен предупредить слушателя в соответствующее время. В вашем случае вас интересует меню, поэтому вы должны добавить к нему своего слушателя.

Некоторые ссылки ссылки:

  1. Свинг учебник about menus
  2. Observer design pattern, что то, что вы используете при добавлении слушателей
  3. How to write an ActionListener учебник
2

Я пишу код которые могут быть полезны для вас, например: link here.

Существует также хороший учебник here, на котором я основал свой код.

 Смежные вопросы

  • Нет связанных вопросов^_^