Java Swing JComponent.getComponentCount()始终返回0

Java Swing JComponent.getComponentCount()始终返回0,java,swing,jmenu,jpopupmenu,Java,Swing,Jmenu,Jpopupmenu,我只是很困惑为什么会这样。最终,我希望有逻辑来测试索引0处的组件,但首先我需要这个方法来准确返回。下面是返回0的代码示例: parentComp.add(saveAsItem); parentComp.add(saveItem); if(manager.getListConfigurations().size() > 0){ parentComp.add(loadMenu); parentComp.add(removeMenu);

我只是很困惑为什么会这样。最终,我希望有逻辑来测试索引0处的组件,但首先我需要这个方法来准确返回。下面是返回0的代码示例:

    parentComp.add(saveAsItem);
    parentComp.add(saveItem);
    if(manager.getListConfigurations().size() > 0){
        parentComp.add(loadMenu);
        parentComp.add(removeMenu);
    }
    System.out.println("COUNT: " + parentComp.getComponents().length);
println语句总是返回0。我认为它应该返回2或4,这取决于是否满足上述条件

这是非常奇怪的行为。我似乎不明白为什么会这样。我们将不胜感激

编辑:如果执行以下操作,则会出现异常:

parentComp.getComponent(0).getClass().getName();

java.lang.ArrayIndexOutOfBoundsException: No such child: 0
所以它显然不认为有孩子,但确实有。我就在那里加上它们

编辑2:我使用的是一个声明为JComponent的类,但它可以根据条件实现为JMenu或jpopmpmenu。在本例中,它被声明为JMenu。也许这是奇怪的行为

我使用的是一个声明为JComponent的类,但它可以根据条件实现为JMenu或jpopmpmenu。在本例中,它被声明为JMenu。也许这是奇怪的行为

假设将
JMenuItem
添加到
JMenu
,则
JMenu
处理
JMenuItem
添加的方式不同,因为它们被添加到基础
jpopmpmenu
,因此您应该获取
JMenu
jpopmpmenu
,并计算此容器中包含的项目。例如:

JPopupMenu menu1 = new JPopupMenu();
menu1.add(new JMenuItem("Item1"));
menu1.add(new JMenuItem("Item2"));
countItems(menu1);
JMenu menu2 = new JMenu();
menu2.add(new JMenuItem("Item1"));
menu2.add(new JMenuItem("Item2"));
countItems(menu2.getPopupMenu());//Use the JPopupMenu rather than the JMenu itself)

private static final void countItems(JPopupMenu menu){
    System.out.println("COUNT: " + menu.getComponents().length);
}
我使用的是一个声明为JComponent的类,但它可以根据条件实现为JMenu或jpopmpmenu。在本例中,它被声明为JMenu。也许这是奇怪的行为

假设将
JMenuItem
添加到
JMenu
,则
JMenu
处理
JMenuItem
添加的方式不同,因为它们被添加到基础
jpopmpmenu
,因此您应该获取
JMenu
jpopmpmenu
,并计算此容器中包含的项目。例如:

JPopupMenu menu1 = new JPopupMenu();
menu1.add(new JMenuItem("Item1"));
menu1.add(new JMenuItem("Item2"));
countItems(menu1);
JMenu menu2 = new JMenu();
menu2.add(new JMenuItem("Item1"));
menu2.add(new JMenuItem("Item2"));
countItems(menu2.getPopupMenu());//Use the JPopupMenu rather than the JMenu itself)

private static final void countItems(JPopupMenu menu){
    System.out.println("COUNT: " + menu.getComponents().length);
}

什么是父母公司?杰帕内尔?JMenu?发布SSCCE可能会有所帮助。您是否尝试添加断点并单步执行代码以隔离问题?您在此处提供的信息不足。如果我是你,我会在你提供的第一行代码中添加一个断点。
我使用的是一个声明为JComponent的类,但它会根据条件实现为JMenu或JPopmpmenu,这意味着你要添加JMenuItem?什么是
parentComp
?杰帕内尔?JMenu?发布SSCCE可能会有所帮助。您是否尝试添加断点并单步执行代码以隔离问题?您在此处提供的信息不足。如果我是你,我会在你提供的第一行代码中添加一个断点。
我使用的是一个声明为JComponent的类,但它会根据条件实现为JMenu或jpopmpmenu,这意味着你在添加JMenuItem的?