1

刚开始学习Flex。但我对基本代码感到震惊。我正在尝试检查如何通过动作脚本将组件(比如按钮)添加到应用程序容器。但我看不到输出中的按钮。下面是我的代码,

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
           xmlns:s="library://ns.adobe.com/flex/spark" 
           xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600"
             creationComplete="init()">
<fx:Script>
    <![CDATA[

             import mx.controls.Alert;

             import spark.components.Button;
             import spark.layouts.BasicLayout;

             private function init():void{
                 var bl:BasicLayout = new BasicLayout();
                 var app:Application = new Application();
                 var button1:Button = new Button();
                 var button2:Button = new Button();

                 button1.label ="Button one";
                 button1.x = 100;
                 button2.label = "Two";
                 button2.x = 30;
                 layout = bl;
                 addChild(button1);
                 addChild(button2);


             }
    ]]>
</fx:Script>
<fx:Declarations>
    <!-- Place non-visual elements (e.g., services, value objects) here -->
</fx:Declarations>

我在这里做错了什么?

谢谢

4

2 回答 2

4

这段代码甚至应该抛出一个运行时错误,因为你不能addChild在这里使用。
从 Flex 4 开始,有一个新的组件集(称为Spark)。向 Spark 容器添加视觉项目时,必须使用该addElement方法。既然s:Application是 Spark 容器,你也应该在这里做。因此,只需在您的代码中替换addChildaddElement,它就会起作用。

您可能会问:如果我不能使用它,为什么“addChild”仍然存在?
嗯,答案是:遗产。所有 Flex 组件(即 mx 和 Spark)都继承自UIComponent,它实现addChild了 Flex 框架的方法(addChild实际上是DisplayObjectContainer类的纯 ActionScript 方法)。addElement做了一些额外的事情(我不会在这里太技术化),这就是你不能再使用的原因addChild。但是addChild仍然存在(继承自UIComponent)并且会抛出一个错误,告诉您您不能使用此方法。

这是SkinnableComponent的相关代码:

override public function addChild(child:DisplayObject):DisplayObject
{
    throw(new Error(resourceManager.getString("components", "addChildError")));
}
于 2012-09-17T09:12:55.450 回答
0

我对 BasicLayOut 不熟悉,但我认为如果您保持代码简单,您可以看到该按钮:

 private function init():void{
            // var bl:BasicLayout = new BasicLayout(); 
            // var app:Application = new Application();
// 1. Create button
             var button1:Button = new Button();
             var button2:Button = new Button();
// 2. customize button
             button1.label ="Button one";
             button1.x = 100;
             button2.label = "Two";
             button2.x = 30;
// 3. add button into the container, 'this' is Applciation
           //  layout = bl;
             addElement(button1); // addChild for Flex3
             addElement(button2);
         }

修改你的代码再试一次,祝你好运!

于 2012-09-17T08:19:51.290 回答