swing JMenu检索所选项目的路径

时间:2014-12-17 17:33:38

标签: java swing 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);
    }
}

但由于MenuElement数组为空,因此无法正常工作。有什么建议吗?

由于

1 个答案:

答案 0 :(得分:2)

问题是,在调用MenuSelectionManager时,actionPerformed已被清除。

电话按顺序排列:

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

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