2016-09-08 93 views
0

我只是很困惑,爲什麼會發生這種情況。最終,我想有邏輯來測試組件索引0,但首先我需要這種方法準確返回。下面是代碼的樣本我有一個返回0:Swing JComponent.getComponentCount()總是返回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或JPopupMenu實現。在這種情況下,它被聲明爲JMenu。也許這是怪異的JMenu行爲?

+1

什麼是'parentComp'? JPanel的? JMenu的? – copeg

+0

發佈SSCCE可能會有所幫助。 – xehpuk

+0

您是否嘗試過添加斷點並逐句通過代碼來隔離問題?這裏你沒有提供足夠的信息。如果我是你,我會爲你提供的第一行代碼添加一個斷點。 –

回答

3

我使用的是一個聲明爲JComponent的類,但是它根據條件被實現爲JMenu或JPopupMenu。在這種情況下,它被聲明爲JMenu。也許這是怪異的JMenu行爲?

假設你要添加JMenuItem的一個JMenu,一個JMenu涉及另外的JMenuItem'不同,因爲它們被添加到底層JPopupMenu S,所以你應該得到JMenuJPopupMenu和計數的項目包含在此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); 
}