zoukankan      html  css  js  c++  java
  • Flash/Flex学习笔记(3):动态添加组件

    Flash中一个fla文件可以关联到一个as文件,这个有点类似于asp.net中的code behind.

    可参考以下图操作:

    注:
    1.as文件的类名与文件名要求一样,并且默认情况下必须与fla处于同一目录。
    2.所有as文件必须继承自flash.display.Sprite

    下面这个是一个示例文件代码:

    package {
    	
    	import flash.display.Sprite;
    	import fl.controls.Label;
    	import fl.controls.Button;	
    	import fl.controls.List;
    	import flash.text.TextFieldAutoSize;
    	import flash.events.MouseEvent;
    	import fl.data.DataProvider;
    
    	public class AddControlCode extends Sprite {
    		public function AddControlCode() {
    			
    			//加一个label
    			var _label:Label = new Label();
    			_label.text="来来,我是一个Label";
    			_label.width=150;
    			_label.autoSize=TextFieldAutoSize.CENTER;
    			_label.addEventListener(MouseEvent.CLICK,function(){trace(_label.text = "文本被点击了")}); //象不象c#中的匿名函数?
    			this.addChild(_label);
    
    			//加一个Button
    			var _btn:Button = new Button();
    			_btn.label="来来,我是一个Button";
    			_btn.width=150;
    			this.addChild(_btn);
    
    			//获取舞台尺寸
    			var w:int=stage.stageWidth;
    			var h:int=stage.stageHeight;
    
    			trace("宽度:" + w + ",高度:" + h);
    
    			//将Label与Button移动到水平中心点
    			_label.move((w-_label.width)/2,10);
    			_btn.move((w-_btn.width)/2,50);
    
    			_btn.addEventListener(MouseEvent.CLICK,btnClick);//给Button添加点击事件
    			
    			//添加一个List控件
    			var _lst:List = new List();
    			var dp:Array = new Array();
    			var i:uint;
    			var count:uint = _lst.rowCount * 2;
    			for(i=0;i<count;i++){
    				dp.push({label:"元素" + i});
    			}
    			_lst.allowMultipleSelection = true;//允许多选
    			_lst.dataProvider = new DataProvider(dp);//绑定数据源
    			this.addChild(_lst);
    		}
    		
    		//鼠标点击处理函数
    		function btnClick(e:MouseEvent) {
    			trace("你点了我一下,这是证据:" + e);
    		}
    	}
    }
    

    默认情况下,如果您运行这段代码会发现根本没办法编译通过,通常会提示: 未发现fl.controls.Label之类,解决办法:

    先在设计视图中,拖一个Label控件到舞台上,然后再删除就行了,其它组件类似处理

    个人猜测:就好比Winform中,我们引用某命名空间时,通常光using ...后,还需要添加对某程序集的引用,类似的:fla默认可能没有添加fl.controls.Label的"程序集"引用,哪怕你在代码中import过了,但是运行时仍然找不到这个包,而手动拖一个到舞台上后,强迫flash自动添加了相关引用

    最后一个问题:如果组件不全是动态添加的,比如在设计视图下直接把一个Label拖动舞台上,在对应的as文件中如何引用呢? 

    其实也很简单,只要在设计视图中给组件指定一个实例名(比如lbl123),然后就能在as文件中直接用lbl123.text = "..."来使用了

    运行截图:

    作者:菩提树下的杨过
    出处:http://yjmyzz.cnblogs.com
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    栈的实现方式
    复合和继承
    循环链表和双向链表
    抽象类和接口
    private构造器和单例模式
    内部类
    关于初始化和清理
    多态的理解
    幾個小知識
    Youth
  • 原文地址:https://www.cnblogs.com/yjmyzz/p/1680779.html
Copyright © 2011-2022 走看看