Die Iteration / Rekursion durch Container und Komponenten zum Auffinden von Objekten einer bestimmten Klasse?

Ich habe eine schriftliche MnemonicsBuilder Klasse für JLabels und AbstractButtons. Ich möchte schreiben, eine bequeme Methode setMnemonics( JFrame f ) wird Durchlaufen und jedes Kind von den JFrame und wählen Sie aus den JLabels und AbstractButtons. Wie erhalte ich Zugriff auf alles, was enthalten ist in dem JFrame? Ich habe versucht:

LinkedList<JLabel> harvestJLabels( Container c, LinkedList<JLabel> l ) {
    Component[] components = c.getComponents();
    for( Component com : components )
    {
        if( com instanceof JLabel )
        {
            l.add( (JLabel) com );
        } else if( com instanceof Container )
        {
            l.addAll( harvestJLabels( (Container) com, l ) );
        }
    }
    return l;
}

In manchen Situationen, das funktioniert gut. In anderen, es läuft out of memory. Was soll ich nicht denken? Gibt es einen besseren Weg, um die Suche für untergeordnete Bauteile? Ist mein Rekursion fehlerhaft? Ist das nicht ein Bild, wie die Dinge "Sind" andere Sachen in Swing - z.B., Swing ist nicht ein Verwurzelter Baum?

JFrame
|
|\__JMenuBar
|   |
|    \__JMenu
|       |
|        \__JMenuItem
|
|\__JPanel
|   |
|   |\__JButton 
|   |
|   |\__JLabel
|   |
|   |\__ ... JCheckBoxes, other AbstractButtons, etc.
  • +1 für die schöne ASCII-Baum
InformationsquelleAutor P. Myer Nore | 2009-03-29
Schreibe einen Kommentar