关于不能直接在flex Application 里addChild的解决方法
2009-12-10 02:03
225 查看
今天突发奇想,本来想试着直接在Application组件里添加一个MovieClip的:
http://www.adobe.com/2006/mxml" layout="absolute" initialize="init()">
import mx.core.UIComponent;
import flash.display.MovieClip
private function init():void{
//var ui:UIComponent = new UIComponent();
var temp:MovieClip= new MovieClip()
addChild(temp)
//this.addChild(ui)
}
]]>
运行报错,说什么无法将MovieClip转化为IUIComponent,一头雾水之时google了下发现还有人碰到和我一样的错误,用他提供的方法:也就是把这个影片剪辑装进一个UIComponent中,然后再添加这个UIComponent:
private function init():void{
var ui:UIComponent = new UIComponent();
var temp:MovieClip= new MovieClip()
ui.addChild(temp)
this.addChild(ui)
}
原因:
因为Application的addChild方法并非完全继承自DisplayObjectContainer,(
继承:意味着新类看起来和原来的类相似.新类拥有和原有类相同的对外接口,或许还增加了新的接口,使用原有类对象的地方都可以被替换为新类.符合这两个条件的才叫做正确的继承)
Application→LayoutContainer→Container→UIComponent→FlexSprite→Sprite→DisplayObjectContainer
而是在Container那里被重写(在子类中经常改变继承自父类的某个属性或方法的内容,但不改变名称,从而达到子类同名方法实现不同功能的多态效果,这种方式叫做重写,在AS3中只能重写实例方法,不能重写实例属性):
public override function addChild(child:DisplayObject):DisplayObject
虽然参数child的类型是DisplayObject,但是它必须实现IUIComponent接口(所有Flex组件都实现了这一接口),才能添加。
http://www.adobe.com/2006/mxml" layout="absolute" initialize="init()">
import mx.core.UIComponent;
import flash.display.MovieClip
private function init():void{
//var ui:UIComponent = new UIComponent();
var temp:MovieClip= new MovieClip()
addChild(temp)
//this.addChild(ui)
}
]]>
运行报错,说什么无法将MovieClip转化为IUIComponent,一头雾水之时google了下发现还有人碰到和我一样的错误,用他提供的方法:也就是把这个影片剪辑装进一个UIComponent中,然后再添加这个UIComponent:
private function init():void{
var ui:UIComponent = new UIComponent();
var temp:MovieClip= new MovieClip()
ui.addChild(temp)
this.addChild(ui)
}
原因:
因为Application的addChild方法并非完全继承自DisplayObjectContainer,(
继承:意味着新类看起来和原来的类相似.新类拥有和原有类相同的对外接口,或许还增加了新的接口,使用原有类对象的地方都可以被替换为新类.符合这两个条件的才叫做正确的继承)
Application→LayoutContainer→Container→UIComponent→FlexSprite→Sprite→DisplayObjectContainer
而是在Container那里被重写(在子类中经常改变继承自父类的某个属性或方法的内容,但不改变名称,从而达到子类同名方法实现不同功能的多态效果,这种方式叫做重写,在AS3中只能重写实例方法,不能重写实例属性):
public override function addChild(child:DisplayObject):DisplayObject
虽然参数child的类型是DisplayObject,但是它必须实现IUIComponent接口(所有Flex组件都实现了这一接口),才能添加。
相关文章推荐
- 关于realarm210 realarmTest.apk不能直接安装问题解决方法
- tabcontrol不给力,标题不能改解决方法。直接上源码,不注释。
- 关于子线程里不能更新UI操作的解决方法
- Android的项目不能直接引用可移植类库的项目解决方法
- mongodb在secondary不能直接获取primary的信息解决方法
- 关于系统弹出错误:429 , ActiveX 部件不能创建对象 的解决方法
- 关于在vs2005中不能正常编写或调试web应用程序的解决方法(提示当前不是asp.net 2.0)
- 关于iOS 11不能定位问题的解决方法
- 将string直接返回网页,不能作为json处理的解决方法
- vue 数组和对象不能直接赋值情况和解决方法(推荐)
- 关于动态创建dsn时不能设置用户名和密码的解决方法
- 关于Sql Server企业管理器MMC 不能打开文件的解决方法
- 关于在win7环境下线程里调用SaveFileDialog不能显示的解决方法
- 关于 从别人电脑上 高版本的 Xcode上拷贝过来的项目的 不能运行模拟器的 解决方法
- 关于ASP.NET中调用Excel组件不能结束进程的解决方法
- 关于“计算机标识不能更改”问题的解决方法
- 关于Android不能正确发送User-Agent的解决方法
- Live Messenger邮件提醒不能直接打开Live Mail的解决方法
- 关于解决win8.1 不能使用Net Framework 3.5的方法
- 关于Sql Server企业管理器MMC 不能打开文件的解决方法