flex 学习笔记 stage

flexAPI里面介绍:

显示对象的舞台。Flash 应用程序只有一个 Stage 对象。例如,您可以创建多个显示对象并加载到显示列表中,每个显示对象的 stage 属性是指相同的 Stage 对象(即使显示对象属于已加载的 SWF 文件)。

如果显示对象未添加到显示列表,则其 stage 属性会设置为 null

示例:

  
  
  
  
  1. import flash.text.TextField;  
  2.  
  3. var tf1:TextField = new TextField();  
  4. tf1.text = "Text Field 1";  
  5. tf1.border = true;  
  6. tf1.x = 10;  
  7. addChild(tf1);  
  8. tf1tf1.width = tf1.stage.stageWidth / 2 - 10;  
  9.  
  10. var tf2:TextField = new TextField();  
  11. tf2.text = "Text Field 2";  
  12. tf2.border = true;  
  13. tf2.x = tf1.x + tf1.width + 5;  
  14. addChild(tf2);  
  15. tf2tf2.width = tf2.stage.stageWidth / 2 - 10;  
  16.  
  17. trace(stage.stageWidth);  

Application 初始化函数里面获取 this.stage 属性怎么提示 null

这原因主要跟 Application 四大初始化事件有关,必须弄清楚这四个事件,才能搞明白为什么?

四大初始化事件:preinitialize,initialize,creationComplete,apllicationComplete

1. preinitialize 的分派

应用程序 application 已实例化,但此时还未创建任何相关的孩子组件(child component),但是此时 application可获取孩子数。

2. initialize 的分派

此时,创建了相应的孩子组件,但还未对这些子组件进行布局。

3. creationComplete 的分派

应用程序application完成全部实例化,并完成所有子组件的布局

4. apllicationComplete 的分派

上面三处事件的完成,表明application内部启动的整个进程完成,就把 Application实例加入舞台(stage),接下来便会通知SystemManager派发applicationComplete事件。此时,启动程序启动完成并准备运行。

所有 在 applicaiton 的 preinitialize,initialize,creationComplete 事件处理函数里面 获取 stage, 这样肯定是null, 此时applicaiton实例还没有加入 stage,Application实例加入到舞台后,派发ApplicationComplete事件。所以,应该在ApplicationComplete 事件派发后获取 stage。

你可能感兴趣的:(Flex)