在精灵中添加uicomponent

时间:2011-04-15 20:03:39

标签: flex

我想尽快添加UIComponent。这是代码:

private function make() : void {
    var circle : Sprite = new Sprite();
    circle.graphics.beginFill(0xFF0000, 0.2);
    circle.graphics.drawCircle(0, 0, 20);
    var button : Button = new Button();
    button.label = "testing...";
    var wrapper : UIComponent = new UIComponent();

    circle.addChild( button );
    wrapper.addChild( circle );
    addChild( wrapper );
}

问题是添加了按钮,但未显示。如果我做反转 - 添加精灵到uicomponent - 一切正常,但这样它不起作用。我试图使用无效功能按钮等...甚至尝试将“圈”作为UIMovieClip,但没有运气 - 按钮仍然是隐形的。如果我只是做“addChild(button);” - 它显示了,...请帮助,我做错了什么?如何在精灵中添加一个按钮?

2 个答案:

答案 0 :(得分:1)

不幸的是,为了以你尝试的方式使用Sprite,你必须扩展Sprite并实现IUIComponent。

摘自Flex 3语言参考:

  

注意:虽然孩子的参数是   方法指定为类型   DisplayObject,参数必须   实现IUIComponent接口   作为容器的子项添加。   所有Flex组件都实现了这一点   接口

Sprite没有实现IUIComponent,因此您遇到了一个非常典型的问题。与Sprites相比,UIComponent通常不会出现速度问题,因此我建议您只使用UIComponent。

如前所述,你/可以/扩展Sprite来实现IUIComponent,但这很痛苦。

希望这有帮助!

答案 1 :(得分:1)

简短的回答,你不能。你可以做的不是使用Sprite,而是使用UIComponent作为你的圈子。

原因是UIComponent有很多代码可以改变它的行为方式,包括如何添加和布局子代。你可以基本上把相同的代码带到Sprite,因为UIComponent确实扩展了它,但是这将是非常多余的。这对我很有用:

private function make() : void {
    var circle : UIComponent= new UIComponent();
    circle.graphics.beginFill(0xFF0000, 0.2);
    circle.graphics.drawCircle(0, 0, 20);
    var button : Button = new Button();
    button.label = "testing...";
    var wrapper : UIComponent = new UIComponent();

    circle.addChild( button );
    wrapper.addChild( circle );
    addChild( wrapper );
}