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 = "..."来使用了

运行截图:

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏nice_每一天

一天带你入门到放弃vue.js(二)

至此在vue中提供了计算属性,computed,在main.js指定computed对象中指定计算

1131
来自专栏Flutter入门到实战

开发工具总结(5)之Markdown语法图文全面详解及其工具介绍

版权声明:本文为博主原创文章(少量文字参考他人博文,已加上引用说明),未经博主允许不得转载。https://www.jianshu.com/p/c0a2897a...

2554
来自专栏前端说吧

js - 预加载+监听图片资源加载制作进度条

这两天遇到一个新需求:一个一镜到底的h5动画。因为功能的特殊性,就要求我们提前监听页面的静态图片是否全部加载完毕。即处理预加载。

7611
来自专栏前端小叙

Vue.js 2.0 学习重点记录

Vue.js兼容性 Vue.js.js 不支持 IE8 及其以下版本,因为 Vue.js.js 使用了 IE8 不能模拟的 ECMAScript 5 特性。 V...

3595
来自专栏数据结构笔记

Django搭建博客(七):form的使用

不过 form只提供输入框,外层的 form标签和提交按钮都需要自己添加,我们加上 form标签和提交按钮看看:

1493
来自专栏SHERlocked93的前端小站

一个骚气的文章目录自动生成器了解一下

这个插件根据选定的目录内容中的 h1, h2, h3, h4, h5, h6 标签来自动生成目录插入到选定的目录容器中,并且提供一个漂亮的样式效果

1702
来自专栏CIT极客

【奇淫巧技】成为网站开发工程师的捷径!

3829
来自专栏Java成神之路

GEF入门实例_总结_03_显示菜单和工具栏

还记得上一节我们新建的类: ApplicationActionBarAdvisor 吗,这个类继承自 ActionBarAdvisor。

1132
来自专栏大前端开发

从编程小白到全栈开发:响应用户的操作

咳嗽连续咳了一个多月,蓝瘦,我都快要忘记更新文章了...还好一个读友提醒我怎么好久没更新了,我才提起一口气,嘎吱嘎吱的重新转起我这磨损严重的脑袋来。

934
来自专栏一个会写诗的程序员的博客

JS如何模拟鼠标点击X,Y坐标

https://developer.mozilla.org/zh-CN/docs/Web/API/Document/createEvent

1.8K5

扫码关注云+社区

领取腾讯云代金券