Swing JComponent.getComponentCount() 总是返回 0
Swing JComponent.getComponentCount() is always returning 0
我只是很困惑为什么会这样。最终我希望有逻辑来测试索引 0 处的组件,但首先我需要此方法准确地 return。这是我的代码示例 returning 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 语句总是 returns 0。我认为它应该是 return 2 或 4,这取决于是否满足上述条件。
这是非常奇怪的行为。我似乎不明白为什么会这样。帮助将不胜感激。
编辑:如果我执行以下操作,则会出现异常:
parentComp.getComponent(0).getClass().getName();
java.lang.ArrayIndexOutOfBoundsException: No such child: 0
所以它显然不认为有任何 children,但确实有。我正在那里添加它们。
编辑 2:我正在使用声明为 JComponent 的 class,但它根据条件实现为 JMenu 或 JPopupMenu。在本例中,它被声明为 JMenu。也许这是奇怪的 JMenu 行为?
I'm using a class declared as a JComponent, but which gets implemented as either a JMenu or JPopupMenu depending on conditions. In this case, it's been declared as a JMenu. Maybe it's weird JMenu behavior?
假设您要将 JMenuItem
添加到 JMenu
,JMenu
处理 JMenuItem
的添加方式不同,因为它们被添加到基础 JPopupMenu
,因此您应该获取 JMenu
的 JPopupMenu
并计算此 Container 中包含的项目。例如:
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);
}
我只是很困惑为什么会这样。最终我希望有逻辑来测试索引 0 处的组件,但首先我需要此方法准确地 return。这是我的代码示例 returning 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 语句总是 returns 0。我认为它应该是 return 2 或 4,这取决于是否满足上述条件。
这是非常奇怪的行为。我似乎不明白为什么会这样。帮助将不胜感激。
编辑:如果我执行以下操作,则会出现异常:
parentComp.getComponent(0).getClass().getName();
java.lang.ArrayIndexOutOfBoundsException: No such child: 0
所以它显然不认为有任何 children,但确实有。我正在那里添加它们。
编辑 2:我正在使用声明为 JComponent 的 class,但它根据条件实现为 JMenu 或 JPopupMenu。在本例中,它被声明为 JMenu。也许这是奇怪的 JMenu 行为?
I'm using a class declared as a JComponent, but which gets implemented as either a JMenu or JPopupMenu depending on conditions. In this case, it's been declared as a JMenu. Maybe it's weird JMenu behavior?
假设您要将 JMenuItem
添加到 JMenu
,JMenu
处理 JMenuItem
的添加方式不同,因为它们被添加到基础 JPopupMenu
,因此您应该获取 JMenu
的 JPopupMenu
并计算此 Container 中包含的项目。例如:
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);
}