2009-04-16 3 views
0

Was ich zu achive versuchen, ist im Grunde die zur Laufzeit-Funktion von Netbeans „in beilegen“:Wie kann ich eine Komponente zur Laufzeit in einen anderen Container einschließen?

Lassen Sie uns sagen, dass ich diese Komponente Hierarchie haben:

Container 
    Label 1 
    Label 2 
    Label 3 

Und ich möchte Label 2 so umschließen:

Und ich möchte es auch wiederherstellen, dh ich möchte das Etikett wieder "hochziehen", um die ursprüngliche Hierarchie zu erhalten.

EDIT: Das Problem ist, dass zur Laufzeit ich nur Label 2 kenne. Alle anderen Komponenten (Geschwister, Eltern, Kinder) sind unbekannt. Dadurch entfällt die Möglichkeit, die Hierarchie einfach zu rekonstruieren.

Of couse Ich bin sicher, dass ich einig Weg, um diese Funktionalität zu erhalten, indem die Komponentenhierarchien durchlaufen finden, aber ich frage mich:

Gibt es einen besseren Weg? Vielleicht eine Art Utility-Klasse, die diese Kapselungsfunktion bietet?

BEARBEITEN 2: Wie bekomme ich die Layoutbeschränkungen, die die Komponente ursprünglich dem Container hinzugefügt wurde? Ich benötige diese Information, da der neue Container dieselben Einschränkungen verwenden muss. Auch beim Wiederherstellen der ursprünglichen Hierarchie muss die Komponente ihre alten Einschränkungen erneut verwenden.

Antwort

1

Container s sind Component s als auch, so es möglich ist, Container s in Container s einzuschließen.

Also, vielleicht der erste Staat etwas entlang der Linie (Pseudo-Code) sein würde:

Container container1 = new Container(); 
Label label1 = new Label(); 
Label label2 = new Label(); 
Label label3 = new Label(); 
container1.add(label1); 
container1.add(label2); 
container1.add(label3); 

in den zweiten Zustand zu übergehen:

Container container2 = new Container(); 
container1.remove(label2); 
container2.add(label2); 
container2.add(container1); 

Nun wird die label2 in container2 bewegt und dieser Container selbst ist in container1 enthalten.

Und in den ursprünglichen Zustand zurück:

container2.remove(label2); 
container1.add(label1); 
container1.remove(container2); 

bearbeiten

Wenn alles, was wir wissen label2 selbst ist, ist, dass es bereits in einigen Container enthalten sind, können wir die Eltern Container durch den Aufruf bestimmen die ComponentgetParent() Methode.

Anwendung der oben auf den Code, die Linie ersetzen für die Herstellung container1 mit den folgenden:

Container container1 = label2.getParent(); 

Wenn Sie die Component s erhalten möchten, die in der Container gehalten werden, die getComponents() Methode kann aufgerufen werden Um ein Array von Component s abzurufen.

+0

Oh, tut mir leid, ich habe bemerkt, dass meine Frage sehr zweideutig ist. Ich werde klären ... –

+0

OK, das war viel einfacher als ich dachte. Aus irgendeinem Grund war ich überzeugt, dass ich die ursprüngliche Reihenfolge der Kinder beibehalten musste, um das Layout zu behalten, aber dann erkannte ich, dass die Reihenfolge nichts damit zu tun hat ... * doh *. –

+0

Die visuelle Bestellung der Komponenten wird die Aufgabe des LayoutManagers sein, der natürlich ein großes Thema ist! – coobird

Verwandte Themen