Wie Sie bereits gesehen haben, lässt sich die Anzeigeliste als eine Baumstruktur darstellen. Die Bühne, die mehrere Anzeigeobjekte enthalten kann, bildet den Stamm. Diese Anzeigeobjekte, die selbst Anzeigeobjektcontainer sind, können andere Anzeigeobjekte oder Anzeigeobjektcontainer enthalten.
Die DisplayObjectContainer-Klasse enthält Eigenschaften und Methoden zum Durchlaufen der Anzeigeliste mithilfe der Child-Listen der Anzeigeobjektcontainer. Im folgenden Beispielcode werden zwei Anzeigeobjekte,
title
und
pict
, zum
container
-Objekt hinzugefügt (ein Sprite, und die Sprite-Klasse erweitert die DisplayObjectContainer-Klasse):
var container:Sprite = new Sprite();
var title:TextField = new TextField();
title.text = "Hello";
var pict:Loader = new Loader();
var url:URLRequest = new URLRequest("banana.jpg");
pict.load(url);
pict.name = "banana loader";
container.addChild(title);
container.addChild(pict);
Die
getChildAt()
-Methode gibt die untergeordneten Elemente der Anzeigeliste an einer bestimmten Indexposition zurück:
trace(container.getChildAt(0) is TextField); // true
Sie können auch über den Namen auf die untergeordneten Objekte zugreifen. Jedes Anzeigeobjekt verfügt über eine Namenseigenschaft. Wenn Sie diese Eigenschaft nicht zuweisen, weist Flash Player einen Standardwert wie z. B.
„instance1"
zu. Im folgenden Beispielcode wird gezeigt, wie mit der
getChildByName()
-Methode auf ein untergeordnetes Anzeigeobjekt namens
„banana loader"
zugegriffen wird:
trace(container.getChildByName("banana loader") is Loader); // true
Die
getChildByName()
-Methode führt jedoch eventuell zu einer schlechteren Leistung als die
getChildAt()
-Methode.
Da ein Anzeigeobjektcontainer andere Anzeigeobjektcontainer als untergeordnete Objekte in seiner Anzeigeliste enthalten kann, können Sie die vollständige Anzeigeliste der Anwendung als eine Baumstruktur durchlaufen. Sobald in dem bereits vorgestellten Codeausschnitt der Ladevorgang für das
pict
-Loader-Objekt abgeschlossen ist, hat das
pict
-Objekt ein untergeordnetes Anzeigeobjekt geladen (die Bitmap). Für den Zugriff auf dieses Bitmap-Anzeigeobjekt können Sie
pict.getChildAt(0)
verwenden. Sie können auch
container.getChildAt(0).getChildAt(0)
schreiben (da
container.getChildAt(0) == pict
).
Die folgende Funktion liefert eine eingerückte
trace()
-Ausgabe der Anzeigeliste eines Anzeigeobjektcontainers:
function traceDisplayList(container:DisplayObjectContainer, indentString:String = ""):void
{
var child:DisplayObject;
for (var i:uint=0; i < container.numChildren; i++)
{
child = container.getChildAt(i);
trace(indentString, child, child.name);
if (container.getChildAt(i) is DisplayObjectContainer)
{
traceDisplayList(DisplayObjectContainer(child), indentString + " ")
}
}
}
Adobe Flex
Wenn Sie Flex verwenden, sollten Sie wissen, dass Flex viele Komponenten-Anzeigeobjektklassen definiert und dass diese Klassen die Zugriffsmethoden für Anzeigelisten der DisplayObjectContainer-Klasse überschreiben. So überschreibt z. B. die Container-Klasse des mx.core-Pakets die
addChild()
-Methode und andere Methoden der DisplayObjectContainer-Klasse (die die Container-Klasse erweitert). Im Fall der
addChild()
-Methode überschreibt die Klasse die Methode dergestalt, dass nicht alle Typen von Anzeigeobjekten zu einer Container-Instanz in Flex hinzugefügt werden können. Die überschriebene Methode fordert in diesem Fall, dass das untergeordnete Objekt, das Sie hinzufügen, ein Typ des mx.core.UIComponent-Objekts ist.