Trabalho com a lista de exibição

Todos os componentes do ActionScript 3.0 herdam da classe DisplayObject e, portanto, têm acesso a seus métodos e propriedades para interagir com a lista de exibição. A lista de exibição é a hierarquia dos objetos e elementos visuais exibidos de um aplicativo. Essa hierarquia inclui os seguintes elementos:

  • O Palco, que é o contêiner de nível superior

  • Os objetos de exibição, que incluem formas, MovieClip e campos de texto, entre outros

  • Os contêineres de objeto de exibição, que são tipos especiais de objetos de exibição que podem conter objetos de exibição-filho.

A ordem dos objetos na lista de exibição determina sua profundidade no contêiner-pai. A profundidade de um objeto se refere à sua posição de cima para baixo ou de frente para trás no Palco ou em seu contêiner de exibição. A ordem de profundidade fica aparente quando os objetos se sobrepõem, mas ela existe mesmo quando isso não acontece. Cada objeto da lista de exibição tem uma profundidade correspondente no Palco. Se você deseja alterar a profundidade de um objeto colocando-o na frente de outros objetos ou movendo o para trás de outros objetos, é necessário alterar sua posição na lista de exibição. A ordem padrão dos objetos na lista de exibição é a ordem em que eles são posicionados no Palco. A posição 0 na lista de exibição é o objeto na parte inferior da ordem de profundidade.

Adicionar um componente à lista de exibição

Você pode adicionar um objeto a um objeto DisplayObjectContainer chamando o método addChild() ou addChildAt() do contêiner. No caso do Palco, você também pode adicionar um objeto à sua lista de exibição durante a criação ou, no caso dos componentes, arrastando-o do painel Componentes para o Palco. Para adicionar um objeto a um contêiner com o ActionScript, primeiro crie uma ocorrência dele chamando seu construtor com o novo operador e, em seguida, chame o método addChild() ou addChildAt() para colocá-lo no Palco e na lista de exibição. O método addChild() coloca o objeto na próxima posição na lista de exibição, enquanto addChildAt() especifica a posição em que o objeto será adicionado. Se você especificar uma posição que já está ocupada, o objeto que estiver nessa posição e os que estiverem nas posições superiores serão movidos 1 posição para cima. A propriedade numChildren de um objeto DisplayObjectContainer contém o número de objetos de exibição que ele contém. Você pode recuperar um objeto da lista de exibição chamando o método getChildAt() e especificando a posição ou, se você souber o nome do objeto, chamando o método getChildByName() .

Nota: Quando você adicionar um componente com o ActionScript, atribua um nome à sua propriedade name, caso deseje acessá-lo pelo nome na lista de exibição.

O exemplo a seguir exibe os nomes e as posições dos três componentes na lista de exibição. Primeiro, arraste um NumericStepper, um Button e um ComboBox para o Palco, a fim de que eles se sobreponham uns as outros e atribua a eles os nomes de ocorrência aNs , aButton e aCb . Adicione o seguinte código ao painel Ações no Quadro 1 da Linha do tempo:

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

Você verá as seguintes linhas no painel Saída:

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

Movimentação de um componente na lista de exibição

Você pode alterar a posição e a profundidade de exibição de um objeto na lista de exibição, chamando o método addChildAt() e fornecendo o nome de um objeto e a posição em que você deseja colocá-lo como parâmetros do método. Por exemplo, adicione o código a seguir ao exemplo anterior para colocar o NumericStepper na parte superior e repita o loop para exibir as novas posições dos componentes na lista de exibição:

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

Você verá o seguinte no painel Saída:

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

O NumericStepper também aparecerá na frente dos outros componentes na tela.

Observe que numChildren representa o número de objetos (de 1 a n ) na lista de exibição, enquanto a primeira posição da lista é 0. Portanto, se houver três objetos na lista, a posição de índice do terceiro objeto será 2. Isso significa que você pode fazer referência à última posição na lista de exibição, ou ao objeto superior em termos de profundidade de exibição, como numChildren - 1 .

Remoção de um componente da lista de exibição

Você pode remover um componente de um contêiner de objeto de exibição e de sua lista de exibição com os métodos removeChild() e removeChildAt() . O exemplo a seguir coloca os três componentes Button na frente um do outro no Palco e adiciona um ouvinte de eventos para cada um deles. Quando você clica em cada botão, o manipulador de eventos o remove da lista de exibição e do Palco.

  1. Crie um novo documento de arquivo Flash (ActionScript 3.0).

  2. Arraste um botão do painel Componentes para o painel Biblioteca.

  3. Abra o painel Ações, selecione Quadro 1 na Linha do tempo principal e adicione o seguinte código:

    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); 
    }

    Para obter uma explicação completa da lista de exibição, consulte “Exibir programação” em Programação do ActionScript 3.0 .