我正在编写一个扩展 mx.core.UIComponent 的类。在这个类的构造函数中,我想添加一个Button(spark.components.Button)。但是,创建一个新的 Button 对象(例如 var b:Button = new Button();)然后执行 this.addChild(b) 不起作用——没有按钮出现。为什么不能将 Button 对象添加为子对象?
编辑:只是补充一点,当我打印出孩子时,它说 Button 对象是一个孩子,但 Button 没有出现。
我正在编写一个扩展 mx.core.UIComponent 的类。在这个类的构造函数中,我想添加一个Button(spark.components.Button)。但是,创建一个新的 Button 对象(例如 var b:Button = new Button();)然后执行 this.addChild(b) 不起作用——没有按钮出现。为什么不能将 Button 对象添加为子对象?
编辑:只是补充一点,当我打印出孩子时,它说 Button 对象是一个孩子,但 Button 没有出现。
您需要在 createChildren 方法中而不是在构造函数中添加按钮。
protected var button:Button;
override protected function createChildren():void {
super.createChildren();
button = new Button();
addChild(button);
}
根据您要执行的操作,您可能还需要实现 measure 和 updateDisplayList 方法。
直接使用UIComponent
,您不会为您处理孩子的布局;您需要手动设置子组件的位置和大小(请参阅文档)。
考虑使用 a Group
(或者Canvas
,如果您仍在使用 MX 组件)来处理子布局。你仍然可以在 中添加渲染updateDisplayList
,只要确保你也调用super.updateDisplayList()
了。
您需要阅读 ActionScript 组件和 Flex 组件之间的区别。使用 Flex 组件时,必须使用container.addElement( element )
,而不是container.addChild( child )
。据我所知,具有此功能的唯一类源自Group
(至少在我最熟悉的 Spark 框架中)。因此,扩展 UIComponent 将不允许您添加Button
,尽管可以将 UIComponent 添加到 Flex 容器中(我不相信普通的 Sprite 可以这样做)