Em continuação com o tutorial ( 001 - 002 - 003 - 004 - 005 - 006 - 007)
4.3. Removendo objectos da display list. removeChild ():
O processo para remover child’s do stage ou de algum elemento é bem simples e muito parecido com o processo de os adicionar. O método removeChild() está também presente em muitos dos elementos gráficos, pelo que usamos apenas:
removeChild(painel)
e eliminaria-mos o child painel bem como todo o seu conteúdo que inclui o nosso objecto comboBox.
Alem deste processo podemos usar também o método removeChildAt() que recebe como parâmetro o número/index do (child) objecto em causa, número/index esse que é atribuído automaticamente pela display list, no exemplo em cima, o comboBox será o child com número/index 0, visto que é o único child adicionado ao painel, para o remover-mos devemos usar:
painel.removeChildAt(0);
e o comboBox seria automaticamente removido do painel.
Vamos supor que na função em cima, adicionamos também um TextInput ao painel:
private var texto:TextInput = new TextInput();
//e em baixo adicionaríamos ao painel:
painel.addChild(combo);
painel.addChild(texto);
Aqui o texto passará a ser o child com o número/index 1, e para o remover teríamos que usar:
painel.removeChild(texto);
ou
painel.removeChildAt(1);
Como podem ver o processo é bastante simples, mas na realidade, o objecto foi só removido da displayList, mas continua residente na memória, fazendo com que o garbage collector o ignore na sua inspecção, mais uma vez se deve adoptar boas práticas, e para realmente remover estes objectos da memória, devemos usar:
//removidos do parent/displaylist
painel.addChild(combo);
painel.addChild(texto);
//removendo da memória:
combo=null;
texto=null;
Ou seja, devem sempre remove-lo da memória, caso contrário vai sobrecarregar a nossa aplicação.
Se por um lado remover objectos com o removeChildAt() pode ser rápido, por outro lado pode ser bastante penoso e complicado pelo simples facto que se tivermos 20 child’s no container, poderemos remover o child errado alem de ser complicado saber o número/index do respectivo, para isso existe algo que podemos usar para simplificar o processo; A propriedade .name dos objectos que identifica o objecto pelo nome na displayList, na função em cima bastaria dar os nomes aos 3 componentes (painel, comboBox e TextInput) :
antes de os adicionar-mos como childs, definimos:
painel.name="meu_painel1";
combo.name="meu_combo1";
texto.name="meu_texto1";
e para obter o numero do child painel, usariamos:
private var objeto:DisplayObject = getChildByName("meu_painel1");
private var num_painel:int = getChildIndex(objeto);
e finalmente para o remover:
removeChildAt(num_painel);
o mesmo se passaria com os childs combo e texto:
private var objeto_combo:DisplayObject = painel.getChildByName("meu_combo1");
private var num_combo:int = getChildIndex(objeto_combo);
painel.removeChildAt(num_combo);
private var objeto_texto:DisplayObject = painel.getChildByName("meu_texto1");
private var num_texto:int = getChildIndex(objeto_texto);
painel.removeChildAt(num_texto);
Notem que aqui coloquei o painel. tanto no getChildByName como no removeChild, visto que os child’s combo e texto são filhos do painel.
4.4. Mudando a ordem dos childs na display List
Se por algum motivo quiser-mos trocar a ordem dos childs na display list, às vezes podemos querer fazê-lo, por exemplo ao adicionar um botão à aplicação e adicionar-mos depois um painel, o botão ficará coberto pelo painel, assim para colocar-mos o botão à frente do painel bastaria trocar a ordem deles na display list, vejamos:
private var btn:Button = new Button;
private var pnl:Painel = new Painel;
btn.x=25;
btn.width=125;
btn.y=50;
btn.name="but1";
addChild(btn);
pnl.x=20;
pnl.y=40;
pnl.width=250;
pnl.height=200;
pnl.name="painel1";
addChild(pnl);
Neste caso apenas veríamos o painel na nossa aplicação, ou seja, para vermos o botão teríamos ou que adicionar como filhos por outra ordem:
addChild(pnl);
addChild(btn);
podemos ver as respectivas posições dos nossos componentes assim:
trace("->"+getChildAt(0).name);
trace("->"+getChildAt(1).name);
e veremos no output:
-> but1
-> paine1
Para os mudarmos na ordem (z), podemos usar as seguintes formas:
swapChildren(btn, pnl);
que troca a ordem dos componentes no eixo zz identificando pelos componentes, ou
swapChildrenAt(0, 1);
que os troca, identificando pelos seus números/index’s ou ainda:
btn.setChildIndex(2);
que coloca o nosso botão com o número/index 2, ou seja, acima do pnl (index=1).
Estas são algumas formas que permitem alterar o index dos componentes na displayList.
No próximo tutorial falaremos mais especificamente sobre a linguagem AS3, e a sua completa vertente de orientação a objectos.
http://creativecommons.org/licenses/by-nc-nd/3.0/deed.pt









2 Trackbacks
[...] 9:29 am Em continuação com o tutorial ( 001 - 002 - 003 - 004 - 005 - 006 - 007 - 008 [...]
[...] 12:55 pm Em continuação com o tutorial ( 001 - 002 - 003 - 004 - 005 - 006 - 007 - 008 - [...]