2016-09-08 9 views
0

저는 왜 이런 일이 일어나고 있는지 혼란스러워합니다. 궁극적으로 인덱스 0에서 구성 요소를 테스트하는 논리를 갖기를 원하지만 먼저 정확하게 반환하려면이 메서드가 필요합니다. 여기에 내가 그 0을 반환이 코드의 샘플입니다 :Swing JComponent.getComponentCount()는 항상 0을 반환합니다.

가에 println 문은 항상 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); 

그건 내가 그것을 반환해야 하나 생각이 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 동작일까요?

당신은 그들이 기본 JPopupMenu에 추가 다르게 때문에 S '의 JMenuItem의 추가와 JMenu,에 JMenu 거래의'의 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); 
}