解决方案 »

  1.   

    看下面的测试代码,点击 about 的menu 下面的 about author 只有 jmenu没有监听,只有子菜单有监听,jmenu如果能有监听就不是menu了,是 工具栏Jtool了
    package com.wanju.project001.zonghe.test;import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.WindowAdapter;
    import java.awt.event.WindowEvent;
    import java.io.BufferedReader;
    import java.io.FileReader;
    import java.io.IOException;import javax.swing.JFrame;
    import javax.swing.JMenu;
    import javax.swing.JMenuBar;
    import javax.swing.JMenuItem;
    import javax.swing.event.ListSelectionEvent;
    import javax.swing.event.ListSelectionListener;public class MyJMenu {
    JFrame myFrame;
    JMenuBar menubar;
    JMenu file, edit, view, viewSub, about;
    JMenuItem newFile, openFile, saveFile, exit, copy, pause, full, part,
    viewSub_full, viewSub_part, author, help; public MyJMenu() {
    myFrame = new JFrame("Chevi.C J Menu");
    myFrame.setSize(200, 300);
    myFrame.setLocation(400, 400);
    myFrame.setVisible(true); // 利用事件监听关闭.
    myFrame.addWindowListener(new WindowAdapter() {
    public void windowClosing(WindowEvent e) {
    System.exit(0);
    }
    });
    menubar = getMenu();
    // 注意,是setJMenuBar(),二不是awt的setMenuBar()...!!!!
    myFrame.setJMenuBar(menubar);
    } // 菜单设置
    public JMenuBar getMenu() {
    menubar = new JMenuBar(); file = new JMenu("file");
    edit = new JMenu("edit");
    view = new JMenu("view");
    viewSub = new JMenu("viewSon");
    about = new JMenu("about");
    newFile = new JMenuItem("new a file..");
    openFile = new JMenuItem("open a file..");
    saveFile = new JMenuItem("save..");
    exit = new JMenuItem("exit");
    file.add(newFile);
    file.add(openFile);
    file.add(saveFile);
    // 添加分割线,和awt中的不同,awt中的菜单项可以用"-"表示分割线.
    file.addSeparator();
    file.add(exit); menubar.add(file); copy = new JMenuItem("copy");
    pause = new JMenuItem("pause");
    edit.add(copy);
    edit.add(pause);
    menubar.add(edit);
    full = new JMenuItem("full screen");
    part = new JMenuItem("window style");
    view.add(full);
    view.add(part);
    viewSub_full = new JMenuItem("second full");
    viewSub_part = new JMenuItem("second part");
    viewSub.add(viewSub_full);
    viewSub.add(viewSub_part);
    // Menu add Menu......
    view.add(viewSub);
    menubar.add(view);
    author = new JMenuItem("about Author");
    help = new JMenuItem("help");
    about.add(author);
    about.add(help);
    menubar.add(about);
    Monitor m = new Monitor("hello");
    author.addActionListener(m);
    return menubar; } public static void main(String[] args) // ~!@
    {
    new MyJMenu();
    }
    }class Monitor implements ActionListener, ListSelectionListener {
    private String s1; public Monitor(String s) {
    s1 = s;
    } public void valueChanged(ListSelectionEvent e) {
    System.out.println("sdfa");
    } public void actionPerformed(ActionEvent e) {
    try {
    System.out.println("asdfasd");
    BufferedReader br = new BufferedReader(new FileReader(
    "D:\\img\\a.txt")); // 读取字符流
    String s = null;
    while ((s = br.readLine()) != null) { // 一行一行的读取br的文件
    s1 = s1 + s + "\n";

    }
    br.close();
    System.out.println(s1);
    } catch (IOException e1) {
    e1.printStackTrace();
    } }
    }
      

  2.   

    为何不能实现这个功能?给每个MenuItem加事件就可以了。就算是同一个监听器对象,可以用事件类Event对象的getTarget()方法获得是哪个菜单被点击.