2016-09-08 8 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, в зависимости от того, если вышеуказанное условие выполнено.

Это очень странное поведение. Кажется, я не понимаю, почему это происходит. Помощь была бы оценена.

Edit: Если я делаю следующее, я получаю исключение:

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 'S к JMenu, A JMenu сделки с добавлением JMenuItem-х по-разному, потому что они добавляют к основному JPopupMenu, так что вы должны получить JPopupMenu в JMenu и сосчитать предметы содержит внутри этого контейнера. Например:

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); 
}