例子代码及问题如下
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 的引用
}
});我想做的时把某个文件夹的内容(文件和文件)导到一个树状菜单中,当点击相应的菜单后打开对应的文件
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 的引用
}
});我想做的时把某个文件夹的内容(文件和文件)导到一个树状菜单中,当点击相应的菜单后打开对应的文件
解决方案 »
- java静态常量的值是什么意思?
- 字体显示
- 客户端和服务端创建并保持一个长连接,在服务端就会相应的创建一个线程的方式缺憾讨论
- 请教各位高手一个比较麻烦的问题,TOMCAT_端口_web.xml
- switch语句中字符串做为参数怎么实现
- 执行java -jar first.jar为什么报Exception in thread "main" java.lang.NoClassDefFoundError: HelloWorld
- 一个起步问题, 简单。
- 各位大侠:怎样移动JTree中的节点?
- 菜鸟提问喽....(JDataStore of JBuilder 4.0)
- 文本预处理
- 怎样得到数组的维度?
- 我写的推断出张老师的生日是哪一天的答案!大家看看!~~~结帖咯~1
// 0javax.swing.JMenu或者JMenuItem(自己)
// 1javax.swing.JPopupMenu
// 2javax.swing.JPanel
// 3javax.swing.JLayeredPane
// 4javax.swing.JRootPane
// 5view.EditFramegetParent获得的是javax.swing.JPopupMenu,不是它的父菜单JMenu,而是JMenu的JPopupMenu
public void actionPerformed(ActionEvent e) {
// 在这里如何获取menu 的引用
}
});
这个是匿名类的写法 你可以参照JBuilder里的写法 写一个实现ActionListener接口的类
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));
我看了半天api,好像是没有,想到这边确认一下。
要真的没有的话我只好通过扩展JMenu和JItemMenu类类了,定义一个成员来保存父菜单的引用了。我以前这么实现了自己想要的目的,但感觉有点复杂了。如果能从从JMenuItem这个对象能否直接获得它的父菜单JMenu的引用就不用这么麻烦了。
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()方法可以取得主窗口的句柄。