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