Componente in Container (inkl. "Untercontainer") suchen und zurückgeben

chrissy

Bekanntes Mitglied
Hallo,

ich möchte gern eine Funktion schreiben, die mir eine Komponente in einem Container inklusive darin enthaltenen Untercontainern sucht und diese bei Fund zurückgibt.

Momentan habe ich folgenden Code
[Java] public Component findComponentSubLevel(Container container,String name)
{
Component compFind = null;

for (Component compSearch: container.getComponents())
{
System.out.println(compSearch.getClass() + " " + compSearch.getName());
if ( compSearch.getName().equalsIgnoreCase(name) )
{
compFind = compSearch;
break;
}
else
{
if ( compSearch instanceof Container )
{
findComponentSubLevel((Container)compSearch, name);
}
}
}

return compFind;
}[/code]

Mein Problem: Meistens ist die gesuchte Komponente in einem Unterunterunter...container. Bei einem Fund der Komponente wird nun nur der Schleifendurchlauf für den aktuellen Container abgebrochen, aber für den Container darüber fortgesetzt. Wisst ihr was ich meine???
Ganz einfaches Beispiel:
Container 1
Panel 1_1
Textfeld 1_1_1
Textfeld 1_1_2
Panel 1_2
Textfeld 1_2_1
Textfeld 1_2_2

Gesucht wird Textfeld 1_1_1 ... Suche beginnt mit Container 1, findet Panel 1_1, sucht darin findet Textfeld, bricht die Suche in Panel 1_1 ab und springt zurück zur Suche in Container 1, findet dort Panel 1_2 und sucht darin weiter, findet nix und ich bekomme am Ende einen NullPointer.

Wie breche ich nun die Suche ganz ab und bekomme meine gesuchte Komponente zurück???

Vielen Dank für eure Hilfe.
chrissy
 
Zuletzt bearbeitet:

rme

Top Contributor
Hallo,

du hast das ja momentan rekursiv gelöst, da die Methode sich selbst wieder aufruft (Zeile 17). Aber falls der rekursive Aufruf die Komponente in dem Untercontainer findet, speicherst du den gefundenen Wert nicht - die Suche sucht also, ohne dass mit dem Ergebnis irgendwas gemacht wird ;)

Du könntest das Ergebnis zum Beispiel der Variable compFind zuweisen, damit es beim Abbruch der Rekursion immer weiter nach oben zurückgegeben wird.
 

chrissy

Bekanntes Mitglied
Hallo rme,
ok, ich hab das jetzt so gelöst und es scheint zu funktionieren ...

Java:
 public Component findComponentSubLevel(Container container,String name, Component compFind)
  {
    
    for (Component compSearch: container.getComponents())
    {
      if ( (compSearch.getName() != null) && (compSearch.getName().equalsIgnoreCase(name)) )
      {
        compFind = compSearch;
        break;
      }
      else
      {
        if ( compSearch instanceof Container )
        {
          compFind = findComponentSubLevel((Container)compSearch, name, compFind);
        }
      }
    }
    
    return compFind;
  }

Vielen Dank für den Denkanstoss ... gestern war ich bei der Idee einer boolean-Variable hängengeblieben, das gefundene Element mitzugeben war außerhalb meines Denkbereichs :)

chrissy
 

rme

Top Contributor
Hallo nochmal :)

Du hast jetzt zwei Sachen verändert:

* einen Parameter eingefügt, um compFind durchzuschleifen
* in Zeile 15 den Rückgabewert des rekursiven Aufrufs gespeichert und zurückgegeben (Zeile 20)

Der 1. Schritt war gar nicht nötig - du nutzt diesen Parameter in der Methode auch gar nicht, sondern überschreibst ihn nur. Du kannst ihn also entfernen und es wird immernoch funktionieren, denn nur Schritt 2 war nötig :)

Wenn dir unklar ist, warum das funktioniert, kann ich gern versuchen, das etwas ausführlicher zu erklären.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
H Swing Componente zur Läufzeit ändern AWT, Swing, JavaFX & SWT 3
B Graphics2D Componente Drehen AWT, Swing, JavaFX & SWT 2
N Componente und Actionlistener AWT, Swing, JavaFX & SWT 5
P Swing Componente über Rahmen hinaus zeichnen AWT, Swing, JavaFX & SWT 2
M Swing Image in JPanel als Componente AWT, Swing, JavaFX & SWT 2
J Swing JPanel mit Hintergrund zeigt componente nicht AWT, Swing, JavaFX & SWT 6
H Feststellen ob eine Componente sichtbar (im Vordergund) ist? AWT, Swing, JavaFX & SWT 2
J Name von einer Componente AWT, Swing, JavaFX & SWT 3
K Listeners und das Ende einer Componente AWT, Swing, JavaFX & SWT 4
G SWT SWT Componente gesucht AWT, Swing, JavaFX & SWT 2
L Größe einer Componente herausfinden AWT, Swing, JavaFX & SWT 2
R Position einer Componente? AWT, Swing, JavaFX & SWT 9
G Componente Zeile fixieren AWT, Swing, JavaFX & SWT 3
S Funktion nur ausführen, wenn Maus über Componente ist AWT, Swing, JavaFX & SWT 2
S Componente mehrmals verwenden ? AWT, Swing, JavaFX & SWT 3
P Hinzugefügte Componente ist inaktiv AWT, Swing, JavaFX & SWT 14
ARadauer swing html wysiwyg componente AWT, Swing, JavaFX & SWT 6
S Listener übergeordneter Componente Blockiert AWT, Swing, JavaFX & SWT 6
E JFrame Componente aus einer anderen klasse disposen AWT, Swing, JavaFX & SWT 3
G Farbe der Markierung einer Componente ändern AWT, Swing, JavaFX & SWT 2
O Graphics erstellt Componente scheinbar nicht richtig AWT, Swing, JavaFX & SWT 23
B Vorhandenes Graphicsobjekt auf Componente zeichnen AWT, Swing, JavaFX & SWT 19
S [S] custom tree componente AWT, Swing, JavaFX & SWT 8
B componente drucken AWT, Swing, JavaFX & SWT 3
C Componente verkleinern lasse wenn die Frame verkleinert wird AWT, Swing, JavaFX & SWT 2
G Eigene Componente in jScrollView einbetten AWT, Swing, JavaFX & SWT 6
K property panel und selektion einer componente in panel AWT, Swing, JavaFX & SWT 5
R Componente in JTabbedPane unsichtbar AWT, Swing, JavaFX & SWT 4
Z Random Butten erstellen ohne Container AWT, Swing, JavaFX & SWT 15
P JavaFX Zugriff auf Fenster/Layout-Container in eigenen Klassen AWT, Swing, JavaFX & SWT 5
H Aus Array Container Panel an Tabbedpane zuweisen AWT, Swing, JavaFX & SWT 29
W JavaFX Tabelle zeilenweise mit Werten füllen und an Container anpassen AWT, Swing, JavaFX & SWT 23
B Swing KeyListener auf Container? AWT, Swing, JavaFX & SWT 1
I CSS - backgroundImage - Größe automatisch an den Container anpassen AWT, Swing, JavaFX & SWT 1
A Swing Externe Klassen aufrufen und in einem bereits vorhandenen Container einfügen AWT, Swing, JavaFX & SWT 0
B JTextArea Größe an Container anpassen AWT, Swing, JavaFX & SWT 2
Z Swing JPanel soll größer werden als Parent Container (überlappen) AWT, Swing, JavaFX & SWT 5
H Drag-Evente nach Container wechsel AWT, Swing, JavaFX & SWT 2
J Fehlermeldung adding a window to a container AWT, Swing, JavaFX & SWT 9
S JPanel in den Container hinzufügen AWT, Swing, JavaFX & SWT 3
xehpuk Swing Erst Components, dann Container zeichnen AWT, Swing, JavaFX & SWT 2
K Container AWT, Swing, JavaFX & SWT 14
K JFrame-Größe an inneren Container anpassen AWT, Swing, JavaFX & SWT 2
J Swing Container innerhalb eines JPanels erfragen AWT, Swing, JavaFX & SWT 3
W setEnabled in Container Objekten (JScrollPane) AWT, Swing, JavaFX & SWT 5
X Instanzieren und Zuweisen vom BorderLayout an Container nicht notwendig ? AWT, Swing, JavaFX & SWT 4
B JPG in einem Container anzeigen lassen AWT, Swing, JavaFX & SWT 3
S this-Zugriff auf Container höherer Ebene AWT, Swing, JavaFX & SWT 2
P DragAndDrop zw Component und Container AWT, Swing, JavaFX & SWT 4
S SWT Lösen mit Shell, Container oder Group? AWT, Swing, JavaFX & SWT 5
D Container des JFrame zeichnet sich nicht bei Aufruf von paintAll AWT, Swing, JavaFX & SWT 9
T Exception: Adding a window to a container AWT, Swing, JavaFX & SWT 14
D Container vor Fullscreen AWT, Swing, JavaFX & SWT 5
R Container Size Problem AWT, Swing, JavaFX & SWT 5
hdi Verständnisfrage: Container vs. Component AWT, Swing, JavaFX & SWT 3
I Container AWT, Swing, JavaFX & SWT 6
G MouseEvents an Container weiterleiten AWT, Swing, JavaFX & SWT 8
H Benachrichtigt werden wann ein Container repainted wird? AWT, Swing, JavaFX & SWT 5
G Graphics Objekte in AWT Container einfügen AWT, Swing, JavaFX & SWT 2
A MouseEvent auf Container bzw. Frame weiterleiten AWT, Swing, JavaFX & SWT 5
S Mehrere Container AWT, Swing, JavaFX & SWT 10
T Canvas gegen Container austauschen --> GUI fehlt AWT, Swing, JavaFX & SWT 4
M Container in Frame über Button einfügen? AWT, Swing, JavaFX & SWT 4
A Container AWT, Swing, JavaFX & SWT 8
G Durchsichtiger verschiebbarer Container gesucht AWT, Swing, JavaFX & SWT 6
G problem mit anzeigen eines geänderten Container AWT, Swing, JavaFX & SWT 2
S Kann JSP mit BI nicht zum Container hinzufügen AWT, Swing, JavaFX & SWT 7
G hintergrund von JFrame/Container transparent machen AWT, Swing, JavaFX & SWT 2
C JPanel oder Container in JPanel AWT, Swing, JavaFX & SWT 2
X Container aus FocusCycle entfernen AWT, Swing, JavaFX & SWT 2
B Container aus einen andere Klasse hinbekommen ? AWT, Swing, JavaFX & SWT 5
R Component aus Container entfernen bzw. austauschen. AWT, Swing, JavaFX & SWT 6
I Hintergrundbild bei awt container AWT, Swing, JavaFX & SWT 9
F Swing JTable - MultiHeader inkl. Eingabemöglichkeit AWT, Swing, JavaFX & SWT 1
M Mathematische Ableitung bilden (Inkl. Kurvendiskussion) AWT, Swing, JavaFX & SWT 7
B JPanel-Inhalte inkl. JTextarea zoomen? AWT, Swing, JavaFX & SWT 3
H Swing JScrollPane mit "viel Inhalt" scrollt zu langsam (inkl. See-For-Yourself.jar :D) AWT, Swing, JavaFX & SWT 2
vandread Swing Probleme mit jTextField im zusammenspiel mit einem Einblendeffekt (inkl. KSKB) AWT, Swing, JavaFX & SWT 6
S Swing Kopie eines JPanels inkl. aller objekte darin erstellen AWT, Swing, JavaFX & SWT 5
J JMenuBar ist geaddet, aber nicht im Frame. Wo ist der Fehler? (inkl. Code) AWT, Swing, JavaFX & SWT 2
B JTable inkl. JCheckbox AWT, Swing, JavaFX & SWT 5
A Haupt JFrame inkl. aller Komponenten aktualisieren? AWT, Swing, JavaFX & SWT 3

Ähnliche Java Themen

Neue Themen


Oben