黑马程序员技术交流社区
标题:
Menu 和MenuItem添加侦听器的问题
[打印本页]
作者:
张亚青
时间:
2013-3-24 22:17
标题:
Menu 和MenuItem添加侦听器的问题
本帖最后由 张亚青 于 2013-3-27 12:41 编辑
Menu是MenuItem的子类,继承了MenuItem的addActionListener()方法,但是在如下代码中【退出菜单】Menu 类型closeMenu中用到此方法的时候,为什么能够编译通过,但是点击后却没有反应呢?
import java.awt.*;
import java.awt.event.*;
class MenuDemo
{
private Frame f;
private MenuBar mb;
private Menu m,subMenu,closeMenu;
private MenuItem subItem;
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 Menu("退出");
subItem=new MenuItem("子条目");
subMenu.add(subItem);
m.add(subMenu);
m.add(closeMenu);
mb.add(m);
f.setMenuBar(mb);
myEvent();
f.setVisible(true);
}
private void myEvent()
{
//mouseandkeyevent.java复制过来的f窗口监听器
f.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});
closeMenu.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
System.exit(0);
}
});
}
public static void main(String[] args)
{
new MenuDemo();
}
}
复制代码
作者:
谢洋
时间:
2013-3-26 23:19
改写了一下代码,加亮处
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 对象是从菜单栏部署的
下拉式菜单组件
。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2