日期:2014-05-20  浏览次数:20792 次

JMenuItem 实例能否获取到它的父菜单JMenu 实例的引用,请高手指点。
例子代码及问题如下
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   的引用
}
});

我想做的时把某个文件夹的内容(文件和文件)导到一个树状菜单中,当点击相应的菜单后打开对应的文件

------解决方案--------------------
不了解,帮忙顶
------解决方案--------------------
getParent()
------解决方案--------------------
// 在任意位置的JMenu通过getParent()得到的类名
// 0javax.swing.JMenu或者JMenuItem(自己)
// 1javax.swing.JPopupMenu
// 2javax.swing.JPanel
// 3javax.swing.JLayeredPane
// 4javax.swing.JRootPane
// 5view.EditFrame

getParent获得的是javax.swing.JPopupMenu,不是它的父菜单JMenu,而是JMenu的JPopupMenu
------解决方案--------------------
menuItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
// 在这里如何获取menu 的引用
}
});
这个是匿名类的写法 你可以参照JBuilder里的写法 写一个实现ActionListener接口的类
------解决方案--------------------
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));