amcharts嵌入到flex中

本文介绍了一种将Amcharts图表嵌入Flex应用程序的方法。通过创建AmchartsLoader类并使用特定URL参数加载Amcharts SWF文件,实现了图表的动态加载。此外,还提供了一个测试按钮以验证集成的成功。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

amcharts是比较优秀的图表制作工具,它的效果是其他图表工具所无法比拟的。但是amcharts只给我们提示一组图表的控件,没有给我们良好的控制组件和其他的表现形式,但是flex却有丰富的组件可用,包括截图,动态加载图表。

这里先把flex嵌amcharts的实现写出来吧。这是受amcharts可视化配置的启示实现的。

1.先上amcharts的网站上体验一下吧。http://extra.amcharts.com/editor/column/ (这里是柱图),可以得到至少两个启示:

amcharts官网上的可视化配置界面,左边都是flex控件

 

这是用firebug查看到的请求信息

 

  a)这里flex是通过下面的地址来访问amcharts来访问的

   “http://extra.amcharts.com/editor/column/charts/amcolumn.swf?connection_id=amchartscolumn1246975480718&flash_width=600&flash_height=400&data_file=data/sample_data/column.xml&path=data/”

   于是下面也将用这种方式来加载amcharts。

  b)里面有一个amcharts_key.txt是用来让那个超链消失的,也就是说我们可以获得一个key。只要将这个文件放在你的指定的path路径下面就行了。

2.在flex里写好用来嵌入amcharts的mxml。

  加载amcharts的类,AmchartsLoader.as

package com.xvxv.aclass
{
	import mx.controls.SWFLoader;
	import mx.managers.SystemManager;
	
	public class AmchartsLoader extends SWFLoader
	{
		import mx.controls.SWFLoader;
		private var _swfUrl:String = "";
		private var _path:String = "";
		private var _settingsFile:String = "";
		private var _dataFile:String = "";
		public function AmchartsLoader()
		{
			super();
		}
		
		public function set swfUrl(swfUrl:String):void{
			while(swfUrl.indexOf("&")!=-1) swfUrl = swfUrl.replace("&", "%26");
			this._swfUrl = swfUrl;
		}
		
		public function set path(path:String):void{
			while(path.indexOf("&")!=-1) path = path.replace("&", "%26");
			this._path = path;
		}
		
		public function set settingsFile(settingsFile:String):void{
			while(settingsFile.indexOf("&")!=-1) settingsFile = settingsFile.replace("&", "%26");
			this._settingsFile = settingsFile;
		}
		
		public function set dataFile(dataFile:String):void{
			while(dataFile.indexOf("&")!=-1) dataFile = dataFile.replace("&", "%26");
			this._dataFile = dataFile;
		}

		public function loadChart():void{
			load(_swfUrl+"?path="+_path+"&settings_file="+_settingsFile+"&data_file="+_dataFile);
		}
	}
}

 

 嵌入amcharts的mxml,amchartflex.mxml:

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" initialize="init()" 
	layout="absolute" backgroundAlpha="0" backgroundColor="#FFFFFF" 
	xmlns:ns1="com.xvxv.aclass.*">
	<mx:Style>
		Application{
			font-size:12px;
		}
	</mx:Style>
	<mx:Script>
		<![CDATA[
			import mx.controls.Button;
			import mx.controls.Label;
			import mx.controls.Alert;
			import com.xvxv.aclass.AmchartsLoader;
			
			private function init():void{
				var amchartsLoader:AmchartsLoader = new AmchartsLoader();
				amchartsLoader.percentWidth = 100;
				amchartsLoader.percentWidth = 100;
				amchartsLoader.swfUrl = Application.application.parameters["swf_url"];
				amchartsLoader.path = Application.application.parameters["path"];
				amchartsLoader.dataFile = Application.application.parameters["data_file"];
				amchartsLoader.settingsFile = Application.application.parameters["settings_file"];
				this.addChild(amchartsLoader);
				amchartsLoader.loadChart();

				var button:Button = new Button();
				button.x = 10;
				button.y = this.height - 50;
				button.label = "button in flex!";
				button.addEventListener(MouseEvent.CLICK,function():void{
					Alert.show("这个按扭是flex里的,这个图是amcharts做的!","提示");
				});
				this.addChild(button);
			}
		]]>
	</mx:Script>

</mx:Application>

 

在AmchartsLoader是SwfLoader的子类,只是在里面添加了几个属性而已,swfUrl用来指定加载的amcharts的swf实例的中径,本例中用的是amcolmun.swf,也就是柱图,dataFile与settingsFile分别是数据文件的路径与配置文件的路径,与amcharts中一致,不用说明。然后多了一个方法,就是用拼接url的方式将所有和外部参数传入swf中,这是借签了amcharts网站上的可视化配置器。

在amchartflex.mxml中新建了一个AmchartsLoader类,并简单的设置了他们的属性,其中swf_url,path,data_file,settings_file都是从外部获得的参数,然后添加到应用上,下面用一个按扭是为了测试而用的。

OK一个完整的可加载amcharts的swf就生成了,在bin-debug中找到amchartflex.swf,就是我们想要得到的amcharts加载器。

3.如何加载

先把amchartflex.swf拷到你的amcolumn文件夹下。

这里只要改一下原来的html页面就可以了,下面以amcolumn.html为例:

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Column & Bar chart</title>
</head>

<body>
  <script type="text/javascript" src="amcolumn/swfobject.js"></script>
	<div id="flashcontent">
		<strong>You need to upgrade your Flash Player</strong>
	</div>

	<script type="text/javascript">
		// <![CDATA[
		/**原本的内容
		var so = new SWFObject("amcolumn/amcolumn.swf", "amcolumn", "520", "400", "8", "#FFFFFF");
		**/
		
		//下面两行是新的内容
		var so = new SWFObject("amchartflex.swf", "amcolumn", "520", "400", "8", "#FFFFFF");
		so.addVariable("swf_url", "amcolumn/amcolumn.swf");

		so.addVariable("path", "amcolumn/");
		so.addVariable("settings_file", encodeURIComponent("amcolumn/amcolumn_settings.xml"));
		so.addVariable("data_file", encodeURIComponent("amcolumn/amcolumn_data.xml"));
		so.write("flashcontent");

		// ]]>
	</script>
</body>
</html>

 

 从上面可以看到只要修改一个地方就OK了,原来加载的是amcolumn.swf而现在加载的是amchartflex.swf,amcolumn.swf是通过swf_url来指定的。

下面是效果,当点击按钮时弹出的对话框。

测试的时候最好在服务器上测试,因为一个swf加载另一个swf在本地测试可能失败。

附件中用一个tomcat上可以运行的例子,和两个flex源码。

1. 用户与权限管理模块 角色管理: 学生:查看实验室信息、预约设备、提交耗材申请、参与安全考核 教师:管理课题组预约、审批学生耗材申请、查看本课题组使用记录 管理员:设备全生命周期管理、审核预约、耗材采购与分发、安全检查 用户操作: 登录认证:统一身份认证(对接学号 / 工号系统,模拟实现),支持密码重置 信息管理:学生 / 教师维护个人信息(联系方式、所属院系),管理员管理所有用户 权限控制:不同角色仅可见对应功能(如学生不可删除设备信息) 2. 实验室与设备管理模块 实验室信息管理: 基础信息:实验室编号、名称、位置、容纳人数、开放时间、负责人 功能分类:按学科(计算机实验室 / 电子实验室 / 化学实验室)标记,关联可开展实验类型 状态展示:实时显示当前使用人数、设备运行状态(正常 / 故障) 设备管理: 设备档案:名称、型号、规格、购置日期、单价、生产厂家、存放位置、责任人 全生命周期管理: 入库登记:管理员录入新设备信息,生成唯一资产编号 维护记录:记录维修、校准、保养信息(时间、内容、执行人) 报废处理:登记报废原因、时间,更新设备状态为 "已报废" 设备查询:支持按名称、型号、状态多条件检索,显示设备当前可用情况 3. 预约与使用模块 预约管理: 预约规则:学生可预约未来 7 天内的设备 / 实验室,单次最长 4 小时(可设置) 预约流程:选择实验室→选择设备→选择时间段→提交申请(需填写实验目的) 审核机制:普通实验自动通过,高危实验(如化学实验)需教师审核 使用记录: 签到 / 签退:到达实验室后扫码签到,离开时签退,系统自动记录实际使用时长 使用登记:填写实验内容、设备运行情况(正常 / 异常),异常情况需详细描述 违规管理:迟到 15 分钟自动取消预约,多次违规限制预约权限 4. 耗材与安全管理模块 耗材管理: 耗材档案:名称、规格、数量、存放位置、
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值