Swing JComponent.getComponentCount() всегда возвращает 0

Я просто очень смущен, почему это происходит. В конечном итоге я хочу иметь логику для проверки компонента с индексом 0, но сначала мне нужно, чтобы этот метод возвращал точное значение. Вот пример кода, который у меня есть, который возвращает 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?


person user2223059    schedule 08.09.2016    source источник
comment
Что такое parentComp? JPanel? JМеню?   -  person copeg    schedule 08.09.2016
comment
Публикация SSCCE может помочь.   -  person xehpuk    schedule 08.09.2016
comment
Пробовали ли вы добавлять точки останова и выполнять код, чтобы изолировать проблему? Вы не предоставляете здесь достаточно информации. На вашем месте я бы добавил точку останова в первую строку кода, которую вы предоставили.   -  person A.Sharma    schedule 08.09.2016
comment
I'm using a class declared as a JComponent, but which gets implemented as either a JMenu or JPopupMenu depending on conditions Что означает, что вы добавляете элементы JMenuItem?   -  person copeg    schedule 08.09.2016


Ответы (1)


Я использую класс, объявленный как JComponent, но реализуемый либо как JMenu, либо как JPopupMenu в зависимости от условий. В данном случае он был объявлен как JMenu. Может быть, это странное поведение JMenu?

Предполагая, что вы добавляете JMenuItem к JMenu, 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);
}
person copeg    schedule 08.09.2016