我正在尝试在我的java应用程序中集成Jmenu,但我很难检索所选项目的选定路径。
我找到了几个使用类MenuSelectionManager的示例,如下所示:
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
public class selectedPath {
public static void main(final String args[]) {
JFrame frame = new JFrame("MenuSample Example");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JMenuBar menuBar = new JMenuBar();
// File Menu, F - Mnemonic
JMenu fileMenu = new JMenu("File");
fileMenu.setMnemonic(KeyEvent.VK_F);
menuBar.add(fileMenu);
// File->New, N - Mnemonic
JMenuItem newMenuItem = new JMenuItem("New");
fileMenu.add(newMenuItem);
newMenuItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
MenuElement[] eles = MenuSelectionManager.defaultManager().getSelectedPath();
System.out.println(eles.length);
for (MenuElement ele : eles) {
System.out.println(ele);
}
MenuSelectionManager.defaultManager().clearSelectedPath();
}
});
frame.setJMenuBar(menuBar);
frame.setSize(350, 250);
frame.setVisible(true);
}
}
但它不起作用,因为菜单元素数组为空。有什么建议吗?
谢谢
问题是在调用actionPerformed
时MenuSelectionManager
已经被清除。
调用按该顺序排列:
msm.clearSelectedPath(); // msm is the MenuSelectionManager
menuItem.doClick(0); // This eventually triggers your actionPerformed
但问题是你想用它做什么?您显然知道在哪个JMenutItem
执行了单击(e.getSource()
返回相关的JMenuItem
(,并且您可以轻松地返回组件层次结构以检索所选菜单的完整路径,所以我想知道您要用这样的代码实现什么。