例子代码及问题如下
JMenu menu;
JMenuBar menuBar = new JMenuBar();
JMenuItem menuItem;
menu = new JMenu("文件");
menuBar.add(menu);
menuItem = menu.add(new JMenuItem("新建"));
menuItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
// 在这里如何获取menu 的引用
}
});我想做的时把某个文件夹的内容(文件和文件)导到一个树状菜单中,当点击相应的菜单后打开对应的文件

解决方案 »

  1.   

    // 在任意位置的JMenu通过getParent()得到的类名
    // 0javax.swing.JMenu或者JMenuItem(自己)
    // 1javax.swing.JPopupMenu
    // 2javax.swing.JPanel
    // 3javax.swing.JLayeredPane
    // 4javax.swing.JRootPane
    // 5view.EditFramegetParent获得的是javax.swing.JPopupMenu,不是它的父菜单JMenu,而是JMenu的JPopupMenu
      

  2.   

    menuItem.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
    // 在这里如何获取menu 的引用
    }
    });
    这个是匿名类的写法 你可以参照JBuilder里的写法 写一个实现ActionListener接口的类
      

  3.   

    ---这个是匿名类的写法 你可以参照JBuilder里的写法 写一个实现ActionListener接口的类我的问题是JMenuItem 实例能否获取到它的父菜单JMenu 实例的引用,跟ActionListener关系不大吧
      

  4.   

    JMenu menu;
    JMenuBar menuBar = new JMenuBar();
    JMenuItem menuItem;
    menu = new JMenu("文件");
    menuBar.add(menu);
    menuItem = menu.add(new JMenuItem("新建"));
    menuItem.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
    // 在这里如何获取menu 的引用
                      menu.doSomething();                                //直接用
    }
    });
    或者
    class MenuItemActionListener implements ActionListener {
                private Menu menu;
                public MenuItemActionListener(Menu menu) {
                        this.menu = menu;
                 }
                 public void actionPerformed(ActionEvent e) {
    // 在这里如何获取menu 的引用
                      menu.doSomething();                                //直接用
       }
    }
    menu = new JMenu("文件");
    menuBar.add(menu);
    menuItem = menu.add(new JMenuItem("新建"));
    menuItem.addActionListener(new MenuItemActionListener(menu));
      

  5.   

    通过自定义类的方法可以达到我的目的,我想问得是从JMenuItem这个对象能否直接获得它的父菜单JMenu的引用。
    我看了半天api,好像是没有,想到这边确认一下。
    要真的没有的话我只好通过扩展JMenu和JItemMenu类类了,定义一个成员来保存父菜单的引用了。我以前这么实现了自己想要的目的,但感觉有点复杂了。如果能从从JMenuItem这个对象能否直接获得它的父菜单JMenu的引用就不用这么麻烦了。
      

  6.   

    转自:iteye
    JMenuItem mi = (JMenuItem)e.getSource(); // e是事件监听方法中的事件参数(ActionEvent) 
    JMenu jm = (JMenu)mi.getAccessibleContext().getAccessibleParent(); // 如果使用mi.getParent(),得到的竟然是JPopupMenu对象,十分之不和谐呀^ ^ 
    MainFrame mf = (MainFrame)jm.getRootPane().getParent(); // 对形如JButton之类的对象使用getRootPane().getParent()方法可以取得主窗口的句柄。