我试图在我的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);
}
}
但由于MenuElement数组为空,因此无法正常工作。有什么建议吗?
由于
答案 0 :(得分:2)
问题是,在调用MenuSelectionManager
时,actionPerformed
已被清除。
电话按顺序排列:
msm.clearSelectedPath(); // msm is the MenuSelectionManager
menuItem.doClick(0); // This eventually triggers your actionPerformed
但问题是你想用它做什么?您显然知道点击执行的JMenutItem
e.getSource()
会返回相关的JMenuItem
),您可以轻松地返回组件层次结构以检索所选菜单的完整路径,所以我想知道你用这种代码想要实现的目标。