1

我已经编写了代码来在 JMenuItem 上执行单击事件,但是在调试时没有触发。(我知道我不应该在这个论坛上问这些问题,但我是这个论坛的新手)

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();
  }
}
4

3 回答 3

2

您需要将您添加ActionListener到要添加的菜单项中JMenu。您正在做的是制作一个具有动作侦听器的菜单项。然后使用该菜单项的实例方法创建一个完全不相关的//JMenuBar然后附加到JMenu.JMenuItemJFrame

于 2012-01-13T19:26:57.503 回答
2

您的ClsMenu类实现ActionListener了,但不是通过实现这样的接口,您将自动接收事件。

您应该将您添加ActionListener到您感兴趣的对象中,以便该对象知道它应该在适当的时间警告侦听器。在您的情况下,您对菜单感兴趣,因此您应该将侦听器添加到其中。

一些参考链接:

  1. 关于菜单的 Swing 教程
  2. 观察者设计模式,这是您在添加侦听器时使用的模式
  3. 如何编写ActionListener教程
于 2012-01-13T22:21:27.053 回答
2

我正在编写一些可能对您有用的代码作为示例:link here

这里还有一个很好的教程,这是我的代码的基础。

于 2012-01-13T22:25:30.647 回答