使用顯示清單

所有 ActionScript 3.0 組件都是繼承自 DisplayObject 類別,因此,存取它的方法和屬性就可以和顯示清單進行互動。「顯示清單」是已顯示物件和應用程式中視覺元素的階層架構。這個階層架構包括下列元素:

  • 舞台,即最上層容器

  • 顯示物件,包括形狀、影片片段和文字欄位的其中一項

  • 顯示物件容器,可以包含子顯示物件的特殊顯示物件類型。

顯示清單中的物件順序決定了它們在父容器中的深度。物件的深度代表該物件在「舞台」上或其顯示容器中由上到下或由前到後的位置。物件重疊時就可以看出深度的順序,但物件不重疊時仍然可以看出深度的順序。顯示清單中的每個物件都有一個在「舞台」上的對應深度。如果要將物件放到最前面,或是移到其它物件後面以變更物件的深度,您必須變更它在顯示清單中的位置。顯示清單中預設的物件順序是之前將它們放入「舞台」時的順序。顯示清單中的位置 0 表示位在深度順序底部的物件。

將組件加入到顯示清單

您可以呼叫容器的 addChild() addChildAt() 方法,將物件加入 DisplayObjectContainer 物件中。如果是在「舞台」上,您可以先建立物件,然後在編寫期間將它加入到它的顯示清單中;如果是加入組件,則可以將它從「組件」面板拖曳到「舞台」上。如果要使用 ActionScript 將物件加入到容器,請先使用 new 運算子叫用物件的建構函式來建立它的實體,然後呼叫 addChild() addChildAt() 方法將它放到「舞台」上和顯示清單中。 addChild() 方法會將物件放入顯示清單中的下一個位置上,而 addChildAt() 則是指定要加入物件的位置。如果指定的位置已經有物件佔用,這個位置上以及它上方的物件將往上移動 1 個位置。DisplayObjectContainer 物件的 numChildren 屬性則包含它所含有的顯示物件數目。從顯示清單擷取物件的方式是,呼叫 getChildAt() 方法並指定位置,或是在知道物件的名稱時呼叫 getChildByName() 方法。

備註: 如果想透過顯示清單中的名稱來存取物件,在使用 ActionScript 加入組件時就必須將名稱指定給它的 name 屬性。

下列範例會從顯示清單中顯示三個組件的名稱和位置。首先,將 NumericStepper、Button 和 ComboBox 拖曳到「舞台」上使它們互相重疊,並設定 aNs aButton aCb 的實體名稱。然後,在「時間軸」之「影格 1」的「動作」面板中,加入下列程式碼:

var i:int = 0; 
while(i < numChildren) { 
    trace(getChildAt(i).name + " is at position: " + i++); 
}

您應該會在「輸出」面板中看到下列結果:

aNs is at position: 0 
aButton is at position: 1 
aCb is at position: 2

移動顯示清單中的組件

您可以呼叫 addChildAt() 方法並提供物件的名稱以及您要放入物件的位置做為方法的參數,變更物件在顯示清單和顯示深度中的位置。例如,將下列程式碼加入上一個範例就會將 NumericStepper 放到頂端,再循環執行一次則會顯示組件在顯示清單中的新位置:

this.addChildAt(aNs, numChildren - 1); 
i = 0; 
while(i < numChildren) { 
    trace(getChildAt(i).name + " is at position: " + i++); 
}

您應該會在「輸出」面板中看到下列結果:

aNs is at position: 0 
aButton is at position: 1 
aCb is at position: 2 
aButton is at position: 0 
aCb is at position: 1 
aNs is at position: 2

NumericStepper 也應該會出現在螢幕上其它組件的前面。

請注意, numChildren 是顯示清單中物件的數目 (從 1 到 n ),而清單中的第一個位置是 0。因此當清單中有三個物件時,第三個物件的索引位置即是 2。也就是 numChildren - 1 可以用來表示顯示清單的最後一個位置,以顯示深度而言,則是最頂端的物件。

移除顯示清單中的組件

您可以使用 removeChild() removeChildAt() 方法,從顯示物件容器和組件的顯示清單中將組件移除。下列範例會將三個 Button 組件重疊放到「舞台」上,並為每個組件加入事件偵聽程式。當您按一下每個 Button 後,事件處理常式就會將它從顯示清單和「舞台」上移除。

  1. 建立新的 Flash 檔案 (ActionScript 3.0) 文件。

  2. 將 Button 從「組件」面板拖曳到「元件庫」面板。

  3. 開啟「動作」面板,選取主要「時間軸」中的「影格 1」,然後加入下列程式碼:

    import fl.controls.Button; 
     
    var i:int = 0; 
    while(i++ < 3) { 
        makeButton(i); 
    } 
    function removeButton(event:MouseEvent):void { 
        removeChildAt(numChildren -1); 
    } 
    function makeButton(num) { 
        var aButton:Button = new Button(); 
        aButton.name = "Button" + num; 
        aButton.label = aButton.name; 
        aButton.move(200, 200); 
        addChild(aButton); 
        aButton.addEventListener(MouseEvent.CLICK, removeButton); 
    }

    如需顯示清單的完整說明,請參閱「ActionScript 3.0 程式設計」中的「顯示程式設計」。