Gördüğünüz gibi, görüntüleme listesi bir ağaç yapısındadır. Ağacın en üst kısmında Sahne Alanı bulunur ve birden çok görüntüleme nesnesi içerebilir. Kendileri de görüntüleme nesnesi kabı olan bu görüntüleme nesneleri, başka görüntüleme nesnelerini veya görüntüleme nesnesi kaplarını içerebilir.
DisplayObjectContainer sınıfı, görüntüleme nesnesi kaplarının alt öğe listeleri yoluyla görüntüleme listesinde geçiş yapılmasına yönelik özellik ve yöntemleri içerir. Örneğin,
container
nesnesine (bu Sprite olur ve Sprite sınıfı DisplayObjectContainer sınıfını genişletir)
title
ve
pict
olmak üzere iki görüntüleme nesnesi ekleyen şu kodu göz önünde bulundurun:
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);
getChildAt()
yöntemi, belirli bir dizin konumunda görüntüleme listesinin alt öğesini döndürür:
trace(container.getChildAt(0) is TextField); // true
Ayrıca ada göre de alt nesnelere erişebilirsiniz. Her görüntüleme nesnesi bir ad özelliğine sahiptir ve ad özelliği atamazsanız, Flash Player veya AIR uygulaması
"instance1"
gibi varsayılan bir değer atar. Örneğin, aşağıdaki kod,
"banana loader"
adına sahip bir alt görüntüleme nesnesine erişmek için
getChildByName()
yönteminin nasıl kullanıldığını gösterir:
trace(container.getChildByName("banana loader") is Loader); // true
getChildByName()
yönteminin kullanılması,
getChildAt()
yöntemine göre daha düşük performans elde edilmesine neden olabilir.
Görüntüleme nesnesi kabı, görüntüleme listesinde alt nesneler olarak başka görüntüleme nesnesi kaplarını içerebildiğinden, ağaç olarak uygulamanın tam görüntüleme listesinde geçiş yapabilirsiniz. Örneğin, daha önce gösterilen kod alıntısında,
pict
Loader nesnesi için yükleme işlemi tamamlandıktan sonra,
pict
nesnesine yüklenmiş tek bir alt görüntüleme nesnesi olur ve bu da bitmap'tir. Bu bitmap görüntüleme nesnesine erişmek için,
pict.getChildAt(0)
yazabilirsiniz. Ayrıca şunu da yazabilirsiniz:
container.getChildAt(0).getChildAt(0)
(
container.getChildAt(0) == pict
olduğundan).
Aşağıdaki işlev, görüntüleme nesnesi kabından görüntüleme listesinin girintili bir
trace()
çıktısını sağlar:
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
Flex kullanıyorsanız, Flex öğesinin birçok bileşen görüntüleme nesnesi sınıfını tanımladığını ve bu sınıfların DisplayObjectContainer sınıfının görüntüleme listesi erişim yöntemlerini geçersiz kıldığını bilmeniz gerekir. Örneğin, mx.core paketinin Container sınıfı,
addChild()
yöntemini ve DisplayObjectContainer sınıfının diğer yöntemlerini (Container sınıfının genişlettiği) geçersiz kılar.
addChild()
yöntemi olması durumunda, tüm görüntüleme nesnesi türlerini Flex'te bir Container örneğine ekleyemeyeceğiniz şekilde sınıf yöntemi geçersiz kılar. Bu durumda, geçersiz kılınan yöntem, eklediğiniz alt nesnenin bir mx.core.UIComponent nesnesi türü olmasını gerektirir.