2016-09-08 2 views
0

Ich bin nur sehr verwirrt, warum das passiert. Letztendlich möchte ich eine Logik haben, um die Komponente am Index 0 zu testen, aber zuerst muss diese Methode genau zurückgegeben werden. Hier ist ein Beispiel des Codes Ich habe das 0 zurückkehrt:Swing JComponent.getComponentCount() gibt immer 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); 

Die println Anweisung immer 0 zurück Ich denke, es wäre entweder 2 oder 4 zurückgeben sollte, je nachdem, ob die obige Bedingung erfüllt ist.

Das ist sehr seltsames Verhalten. Ich kann nicht verstehen, warum es passiert. Hilfe wäre willkommen.

Edit: Wenn ich den folgenden Code, erhalte ich eine Ausnahme:

parentComp.getComponent(0).getClass().getName(); 

java.lang.ArrayIndexOutOfBoundsException: No such child: 0 

so klar ist es nicht, dass es Kinder gibt, aber es gibt. Ich füge sie genau dort hinzu.

Edit 2: Ich verwende eine Klasse deklariert als eine JComponent, die je nach Bedingungen entweder als JMenu oder JPopupMenu implementiert wird. In diesem Fall wurde es als JMenu deklariert. Vielleicht ist es komisches JMenu Verhalten?

+1

Was ist 'parentComp'? JPanel? JMenu? – copeg

+0

Das Posten eines SSCCE kann helfen. – xehpuk

+0

Haben Sie versucht, Breakpoints hinzuzufügen und den Code durchzugehen, um das Problem zu isolieren? Sie liefern hier nicht genügend Informationen. Wenn ich Sie wäre, würde ich einen Breakpoint zu der ersten von Ihnen bereitgestellten Codezeile hinzufügen. –

Antwort

3

Ich verwende eine Klasse, die als JComponent deklariert ist, aber abhängig von den Bedingungen als JMenu oder JPopupMenu implementiert wird. In diesem Fall wurde es als JMenu deklariert. Vielleicht ist es komisches JMenu Verhalten?

Vorausgesetzt, Sie hinzufügen JMenuItem 's zu einem JMenu, ein JMenu beschäftigt sich mit Zusatz von JMenuItem ist anders, weil sie zu einem darunter liegenden JPopupMenu hinzugefügt werden, so sollten Sie die JPopupMenu des JMenu und zählen Sie die Elemente enthält, erhalten innerhalb dieses Containers. Zum Beispiel:

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