A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张亚青 中级黑马   /  2013-3-24 22:17  /  1495 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 张亚青 于 2013-3-27 12:41 编辑

Menu是MenuItem的子类,继承了MenuItem的addActionListener()方法,但是在如下代码中【退出菜单】Menu 类型closeMenu中用到此方法的时候,为什么能够编译通过,但是点击后却没有反应呢?


  1. import java.awt.*;
  2. import java.awt.event.*;

  3. class MenuDemo
  4. {

  5.         private Frame f;
  6.         private MenuBar mb;
  7.         private Menu m,subMenu,closeMenu;
  8.         private MenuItem subItem;

  9.         MenuDemo()
  10.         {
  11.                 init();
  12.         }

  13.         public void init()
  14.         {
  15.                 f=new Frame("My window");
  16.                 f.setBounds(300,100,500,600);
  17.                 f.setLayout(new FlowLayout());

  18.                 mb=new MenuBar();

  19.                 m=new Menu("文件");
  20.                 subMenu=new Menu("子菜单");

  21.                 closeMenu=new Menu("退出");
  22.                 subItem=new MenuItem("子条目");

  23.                 subMenu.add(subItem);
  24.                 m.add(subMenu);
  25.                 m.add(closeMenu);
  26.                
  27.                

  28.                 mb.add(m);

  29.                 f.setMenuBar(mb);

  30.                 myEvent();
  31.                 f.setVisible(true);


  32.         }
  33.         private void  myEvent()
  34.         {
  35.                 //mouseandkeyevent.java复制过来的f窗口监听器
  36.                 f.addWindowListener(new WindowAdapter()
  37.                 {
  38.                         public void windowClosing(WindowEvent e)
  39.                         {
  40.                                 System.exit(0);
  41.                         }
  42.                 });
  43.                 closeMenu.addActionListener(new ActionListener()
  44.                 {
  45.                         public void actionPerformed(ActionEvent e)
  46.                         {
  47.                                 System.exit(0);
  48.                         }
  49.                 });
  50.         }

  51.         public static void main(String[] args)
  52.         {
  53.                 new MenuDemo();
  54.         }
  55. }


复制代码

点评

如果你的问题已经得到解决,请及时将主题改为[已解决],如果还有问题请继续追问,谢谢!  发表于 2013-3-27 11:09
最好不要把问题和代码都写入代码框中,谢谢  发表于 2013-3-25 07:03

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

1 个回复

倒序浏览
改写了一下代码,加亮处
private Frame f;
        private MenuBar mb;
        private Menu m,subMenu;
        private MenuItem subItem,closeMenu;
        MenuDemo()
        {
                init();
        }
        public void init()
        {
                f=new Frame("My window");
                f.setBounds(300,100,500,600);
                f.setLayout(new FlowLayout());
                mb=new MenuBar();
                m=new Menu("文件");
                subMenu=new Menu("子菜单");
                closeMenu=new MenuItem("退出");
                subItem=new MenuItem("子条目");
                subMenu.add(subItem);
                m.add(subMenu);
                m.add(closeMenu);
我也不是很理解,下面是摘自API的

菜单中的所有项必须属于类 MenuItem 或其子类之一。
选择菜单项时,AWT 发送一个动作事件到该菜单项。由于该事件是一个 ActionEvent 实例,processEvent 方法会检查该事件,并将它传递到 processActionEvent。后一方法将该事件重定向到任何 ActionListener 对象,该对象已在由此菜单项生成的动作事件中注册权益。 注意,子类 Menu 重写此行为,且在选择其中一个子项前不向该框架发送任何事件。

Menu 对象是从菜单栏部署的下拉式菜单组件

评分

参与人数 1技术分 +1 收起 理由
贾文泽 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马