摆动所选项目的 JMenu 检索路径



我正在尝试在我的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);
    }
}

但它不起作用,因为菜单元素数组为空。有什么建议吗?

谢谢

问题是在调用actionPerformedMenuSelectionManager已经被清除。

调用按该顺序排列:

    msm.clearSelectedPath(); // msm is the MenuSelectionManager
    menuItem.doClick(0); // This eventually triggers your actionPerformed

但问题是你想用它做什么?您显然知道在哪个JMenutItem执行了单击(e.getSource()返回相关的JMenuItem(,并且您可以轻松地返回组件层次结构以检索所选菜单的完整路径,所以我想知道您要用这样的代码实现什么。

最新更新