2016-09-08 5 views
0

これはなぜ起こっているのか非常に混乱しています。最終的には、インデックス0のコンポーネントをテストするロジックが必要ですが、まずこのメソッドを正確に返す必要があります。私はそれが上記の条件が満たされた場合に応じて、2または4を返す必要がありますどちらかと思うだろう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を返すこと:ここで私はそれを持っているコードのサンプルが0を返しています。

これは非常に奇妙な動作です。なぜそれが起こっているのか分かりません。ヘルプをいただければ幸いです。

編集:私は、次の操作を行う場合、私は例外を取得:

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の動作ですか?あなたはS「のJMenuItemを加えてJMenu取引は、JMenuにS」のそれらが基礎となるJPopupMenuに追加され、異なるのでJMenuItemを追加しているので、あなたはJMenuJPopupMenuを取得し、含まれているアイテムをカウントすべきであると仮定

このコンテナ内にあります。例:

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); 
} 
関連する問題