Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中从JMenuBarbar访问JMenuItems?_Java_User Interface_Menuitem_Jmenu_Jmenubar - Fatal编程技术网

在Java中从JMenuBarbar访问JMenuItems?

在Java中从JMenuBarbar访问JMenuItems?,java,user-interface,menuitem,jmenu,jmenubar,Java,User Interface,Menuitem,Jmenu,Jmenubar,我现在正在使用菜单栏上的一些java代码,从JMenuBar访问菜单项时遇到问题。菜单栏上有一个项目JMenu,JMenu中有一个JMenuItem,我试图访问JMenuItem,通过名称属性区分项目(这只是我发现的区分项目的一种方法,如果有人知道更好的方法,请告诉我。)我在应用程序中切换选项卡时的on change事件上执行此操作,这是我的代码 public void stateChanged(ChangeEvent e) { if(tabbedPane.getSelectedInde

我现在正在使用菜单栏上的一些java代码,从JMenuBar访问菜单项时遇到问题。菜单栏上有一个项目JMenu,JMenu中有一个JMenuItem,我试图访问JMenuItem,通过名称属性区分项目(这只是我发现的区分项目的一种方法,如果有人知道更好的方法,请告诉我。)我在应用程序中切换选项卡时的on change事件上执行此操作,这是我的代码

public void stateChanged(ChangeEvent e) {
    if(tabbedPane.getSelectedIndex() != 0){
        for(int i = 0; i < menuItems.length; i++){
            MenuElement[] subItems = menuItems[i].getSubElements();
            for(int j = 0; j < subItems.length; j++){
                    System.out.println(subItems[j].getComponent().getName());
            }
        }
    }
}

您必须再次进行向下搜索的原因是,每个JMenu子项都是在jpopmpmenu容器中创建的。因此,“文件”菜单中有一个JPopupMenu容器,该容器中有您的ImportItems JMenuItem。 因此,可以按如下方式更改代码:

MenuElement[] topLevelElements = frameApp.getJMenuBar().getSubElements();
            //Get top level elements--> FileMenu etc
            for(MenuElement menuElement: topLevelElements)
            {
                MenuElement[] subElements = menuElement.getSubElements();
                //get the child elements which are of type JPopupMenu
                for(MenuElement subElement:subElements)
                {
                     //This is the popuMenu which contains child elements
                    System.out.println(subElement.toString());
                    if(subElement instanceof JPopupMenu)
                    {
                        //show child elements
                        for(MenuElement childMenuItem:subElement.getSubElements())
                        {
                            //New and Save here ...
                            System.out.println("ChildMenu Name=>" + childMenuItem.getComponent().getName());
                        }
                    }
                    else
                    {
                        //display names directly
                    }
                }
            }
public void buildMenu(){
    menuBar = frame.getJMenuBar();
    menu = new JMenu("File");
    menu.setName("file");
    menuBar.add(menu);
    importTiles = buildImportTilesMenuItem();
    menu.add(importTiles);
}

public JMenuItem buildImportTilesMenuItem(){
    importTiles = new JMenuItem("Import Tiles");
    importTiles.setName("importTiles");
    importTiles.addActionListener(this);
    return importTiles;
}
MenuElement[] topLevelElements = frameApp.getJMenuBar().getSubElements();
            //Get top level elements--> FileMenu etc
            for(MenuElement menuElement: topLevelElements)
            {
                MenuElement[] subElements = menuElement.getSubElements();
                //get the child elements which are of type JPopupMenu
                for(MenuElement subElement:subElements)
                {
                     //This is the popuMenu which contains child elements
                    System.out.println(subElement.toString());
                    if(subElement instanceof JPopupMenu)
                    {
                        //show child elements
                        for(MenuElement childMenuItem:subElement.getSubElements())
                        {
                            //New and Save here ...
                            System.out.println("ChildMenu Name=>" + childMenuItem.getComponent().getName());
                        }
                    }
                    else
                    {
                        //display names directly
                    }
                }
            }