Lista wyświetlania ma strukturę drzewa. U góry drzewa znajduje się obiekt Stage, który może zawierać wiele obiektów wyświetlanych. Te obiekty wyświetlane, które stanowią również kontenery obiektów wyświetlanych, mogą zawierać inne obiekty wyświetlane lub inne kontenery tych obiektów.
Klasa DisplayObjectContainer zawiera właściwości i metody przeznaczone do przechodzenia przez listę wyświetlania za pośrednictwem list podrzędnych kontenerów obiektów wyświetlanych. Przykład: rozważmy poniższy kod, który dodaje dwa obiekty wyświetlane (
title
i
pict
) do obiektu
container
(jest to obiekt Sprite, a klasa Sprite stanowi rozszerzenie klasy DisplayObjectContainer):
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);
Metoda
getChildAt()
zwraca obiekt podrzędny listy wyświetlania w określonej pozycji indeksu:
trace(container.getChildAt(0) is TextField); // true
Dostęp do obiektów podrzędnych można również uzyskiwać za pomocą nazw. Każdy obiekt wyświetlany zawiera właściwość property i jeśli nie zostanie ona przypisana, wówczas program Flash Player lub AIR przypisuje wartość domyślną, taką jak
"instance1"
. Na przykład: poniższy kod przedstawia sposób użycia metody
getChildByName()
w celu uzyskania dostępu do podrzędnego obiektu wyświetlanego o nazwie
"banana loader"
:
trace(container.getChildByName("banana loader") is Loader); // true
Użycie metody
getChildByName()
może spowodować większe zmniejszenie wydajności niż użycie metody
getChildAt()
.
Kontener obiektów wyświetlanych może zawierać inne kontenery takich obiektów jako obiekty podrzędne na liście wyświetlania, dlatego możliwe jest przechodzenie całej listy wyświetlania aplikacji jako drzewa. Na przykład: we fragmencie kodu przedstawionym wcześniej — po zakończeniu operacji ładowania dla obiektu
pict
Loader obiekt
pict
będzie zawierał jeden podrzędny obiekt wyświetlania, który będzie załadowaną bitmapą. Aby uzyskać dostęp do obiektu wyświetlanego bitmapa, można napisać metodę
pict.getChildAt(0)
. Można również napisać
container.getChildAt(0).getChildAt(0)
(ponieważ
container.getChildAt(0) == pict
).
Uruchomienie poniższej funkcji udostępnia wynik (z wcięciami) wykonania metody
trace()
dla listy wyświetlania z kontenera obiektów wyświetlanych:
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
Jeśli używany jest program Flex, należy pamiętać o tym, że Flex definiuje wiele klas obiektów wyświetlanych składników, a te klasy zastępują metody dostępu do listy wyświetlania klasy DisplayObjectContainer. Na przykład: klasa Container pakietu mx.core zastępuje metodę
addChild()
oraz inne metody klasy DisplayObjectContainer (której rozszerzeniem jest klasa Container). W przypadku metody
addChild()
klasa zastępuje ją w taki sposób, że do instancji Container we Flex nie można dodać wszystkich typów obiektów wyświetlanych. W tym przypadku zastąpiona metoda wymaga, aby dodawany obiekt podrzędny był typu mx.core.UIComponent.