FLEX中使用AS动态创建DataGrid

2010-2-6 评论(2) 分类:技术文章 Tags:

初学FLEX时,需要在AS里动态生成DataGrid,结果搞了很久才搞明白怎么把用MXML写出来的DataGrid改成用AS写出来,其中最主要的就是自定义itemEditor、itemRender怎么写,写篇东西整理总结下。

先看看下面这段代码:

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
	<mx:Script>
		<![CDATA[
			import mx.collections.ArrayCollection;
			import mx.controls.DataGrid;
			import mx.events.ListEvent;
			[Bindable]
			private var dgDataArr:Array = [{name: "Jon", job: "officer"},
									  {name: "James", job: "seller"},
									  {name: "Jodon", job: "manager"}];

			private function itemClickHandler(e:ListEvent):void
			{
				trace(e.target);
			}

		]]>
	</mx:Script>
	<mx:Component id="comboboxEditor">
		<mx:ComboBox dataProvider="{dt}" editable="true">
			<mx:Script>
				<![CDATA[
					private var dt:Array = ["officer", "seller", "manager"];
				]]>
			</mx:Script>
		</mx:ComboBox>
    </mx:Component>
	<mx:DataGrid width="100%" x="10" y="20" fontSize="14" dataProvider="{dgDataArr}" editable="true" itemClick="itemClickHandler(event)">
		<mx:columns>
			<mx:DataGridColumn dataField="name" editable="false" />
			<mx:DataGridColumn dataField="job" itemEditor="{comboboxEditor}">
			</mx:DataGridColumn>
		</mx:columns>
	</mx:DataGrid>
</mx:Application>

代码实现的是创建一个DataGrid,其中job栏可以编辑,并且编辑器是自定义的一个ComboBox。效果如下:

现在看怎么用AS代替MXML创建同样的DataGrid。
(更多…)

[AS3]面向对象的计算器

2008-6-7 评论(0) 分类:作品 Tags:

昨天看了下《大话设计模式》的样章, 看了第一章,通俗易懂,语言风趣,看得很爽,第一章讲用面向对象的形式编写一个计算器,普通地实现计算器的功能很简单,但用要使编出来的程序有封装、继 承,可重用,耦合度低,就变得挺难了,我至今是没编过什么面向对象的程序,理论是看了很多,就是没实践,看了这篇东西后觉得用AS写下,练习下,熟悉下面 向对象的编程,是挺好的~~

此程序包含了7个类,一个运算基类,供继承用,四个运算类,具体实现运算,一个工厂类,创造类的实例用,一个计算器类,具体实现功能用。

源文件下载

[AS3]一个音频视觉效果

2008-3-24 评论(2) 分类:作品 Tags:

AS3最近还在学,但却没什么可以实践,打开电脑一个晚上什么也没干的时候太多了,乱搞也想搞点东西出来。。于是新建了个文件夹叫 dosomething。。嗯。。最近对音乐有点兴趣,就熟悉下Sound吧,看了看以前保存的有关声音波形的代码,嗯。。获取当前声音波形的快照,读出 数据后。。看到忽大忽小的数字,就想是否可以做成劲乐团那样的游戏,声波的数字大就生成一块东西,再配合按键,就可以随着音乐的节奏。。。结果觉得太麻烦 了。。还是做出波形图先吧。。直线就不做了,做了个圆的,把那个刚才说的源文件的Bitmap滤镜都照搬过来,其他的都知道是怎么回事了,就那个 ColorMatrixFilter我研究了好久好久。。都没全弄明白。。网上又找不到教程。。算。。最近师青有任务,本来我是想用FLEX做的,但体积 太大了,放在校园网上,外网访问又慢,不可取。。唉,只能忍痛,乖乖用JAVAscrīpt做吧。。因为这样,所以尽快把这个了结了。。。虽然没多少是自 己的,但感觉效果还不错,欣赏下吧。。
(更多…)

[AS3]DNA链

2007-8-27 评论(0) 分类:作品 Tags:

很早就想自己做出一个DNA链的FLASH来,看完《Make things move》的3D章目后,经过改动上篇文章里的3D旋转效果的FLASH,很容易做出了DNA链,但是,没连线的DNA下半部分还好,上半部分看起来挺失 真,不知为啥。连线的DNA跟上篇的正方形连线有同样的问题,就是不能用sortZ()否则连不成,我也懒得再去研究了。。。

源文件下载


[AS3]FLASH 3D

2007-8-25 评论(1) 分类:作品 Tags:

十几天前,在网上发现了《Actionscrīpt.3.0 Animation Make things move》这 本书,下载后发现里面有FLASH 3D的教程,十分惊喜,于是便开始啃完书内的3D教程部分。这本书写得十分详细,看完后我对FLASH里3D的制作已经有所了解,不过还是有许多不明白的 地方,下面是我前两天参照教程做的3D,其中正方形的那个有两个问题:一个是,如果照书上所说用zsort排列八个点就可以使离屏幕近的点出现在上面,但 无法完成绘制正方形,如果不用zsort()可以绘制正方形但无法使离屏幕近的点出现在上面。另一个是,正方形旋转久了后会出现失真的现象,变得完全不像 一个正方形了,继续旋转会变回来,周期性失真~~想不透为什么会这样。研究3D真伤脑筋,搞得我近几天没什么兴致继续学习~~下面两个的源代码不用放出 拉,想知道的下载上面那本书就行了,推荐下载。

[AS3][开源]拼图游戏。。终于完成。。

2007-8-14 评论(5) 分类:作品 Tags:

puzzle

效果查看:http://cnbang.net/lab/puzzle/index.html

源文件下载:puzzle.zip

上篇说到,拼图游戏做到一半不知道怎么做也不想再做了,但前几天看到一些方法,知道了下一步该怎么做,而最近AS3又不知怎么学了,于是就想把它完成,当作练习。

这个程序写得该是我最简洁的一个(我没说很简洁。。),以前我写的都是乱七八糟的一堆东西,有效果就行了,这次我很注意代码的简洁性了,还加了注释。。前所未有。

附:解决FLASH PLAYER安全性问题:
打开C:\Documents and Settings\Administrator\Application Data\Macromedia\Flash Player(我计算机用户名为Administrator,记得把隐藏文件夹打开)

用记事本打开这个目录下的FlashPlayerTrust文件夹下的myTrustFiles.cfg文件(没有就创建一个)允许哪个路径下的 SWF文件可以与internet通信的就把路径写上。。最简便的方法当然是把你机器里所有的盘都给他写上…保存关闭。OK了

[AS3]摄像头录制

2007-7-30 评论(1) 分类:作品 Tags:

看了AS2做的摄像头录制程序,挺简单的,就想用AS3做,练习一下,本以为很简单,没想到写了代码后错漏百出,好不容易都改正过来了,结果怎么调录制的图象跟原图象的尺寸都不一样,搞得我都不想再做了。先放上来,高手知道的说下啊~

源文件下载

AS文件代码:

package{
import flash.display.Sprite
import flash.media.Camera
import flash.events.MouseEvent
import flash.display.BitmapData
import flash.events.Event
import flash.media.Video
import flash.display.Bitmap
public class camera extends Sprite{
var mycamera:Camera=Camera.getCamera()
var myvideo:Video=new Video()
var bit:Array
var vwidth=250
var vheight=200
var i:uint=1
var playvideo:Bitmap=new Bitmap()
public function camera (){
myvideo.attachCamera(mycamera)
myvideo.smoothing=true
myvideo.width=vwidth
myvideo.height=vheight
myvideo.x=50
myvideo.y=30
addChild(myvideo)
addChild(playvideo)
}
public function rec_btn(btn){
btn.addEventListener(MouseEvent.MOUSE_DOWN,on_rec_btn)
}
public function play_btn(btn){
btn.addEventListener(MouseEvent.MOUSE_DOWN,on_play_btn)
}
public function stop_btn(btn){
btn.addEventListener(MouseEvent.MOUSE_DOWN,on_stop_btn)
}
public function on_rec_btn(event:MouseEvent){
bit=new Array()
i=1
addEventListener(Event.ENTER_FRAME,onenterframe)
}
public function on_stop_btn(event:MouseEvent){
removeEventListener(Event.ENTER_FRAME,onenterframe)
removeEventListener(Event.ENTER_FRAME,onenterframeplay)

}
public function on_play_btn(event:MouseEvent){
addEventListener(Event.ENTER_FRAME,onenterframeplay)
}
private function onenterframe(event:Event){
var rec:BitmapData=new BitmapData(vwidth,vheight,true,0xff)
rec.draw(myvideo)
bit.push(rec)
}
private function onenterframeplay(event:Event){
if(i<bit.length){
playvideo=new Bitmap(bit[i])
playvideo.x=360
playvideo.y=30
addChild(playvideo)
i++
}else{
removeEventListener(Event.ENTER_FRAME,onenterframeplay)
}

}
}
}

[AS3]输入两边一角画三角形

2007-7-29 评论(0) 分类:作品 Tags:

这几天都在学习AS3,感觉像是从零开始,跟AS2差别很大~经过啃书,大概知道了它的模式,没什么好练习,就上次画三角形的代码写成AS3,不同的是这次是输入两边长和一个角度,似乎这样才能确定一个三角形,输入两个角度的怎么做我还不知道~~~

代码:

package{
import flash.display.Sprite
import flash.events.MouseEvent
import flash.text.TextField
import flash.text.TextFieldType
public class triangle extends Sprite{
private var btnS:Sprite=new Sprite()
private var drawS:Sprite=new Sprite()
var aside:TextField=createtxt(150,350,40,20)
var bside:TextField=createtxt(200,350,40,20)
var angle:TextField=createtxt(250,350,40,20)
var ctrl:TextField=createtxt(350,350,40,20)
public function triangle(){
aside.type=TextFieldType.INPUT
bside.type=TextFieldType.INPUT
angle.type=TextFieldType.INPUT
aside.text=”边长a”
bside.text=”边长b”
angle.text=”ab夹角”
btnS.graphics.beginFill(0x000000)
btnS.graphics.drawRect(300,350,40,20)
btnS.buttonMode=true
btnS.addEventListener(MouseEvent.MOUSE_DOWN,onbtnDown)
addChild(aside)
addChild(bside)
addChild(angle)
addChild(btnS)
addChild(ctrl)
}
private function createtxt (x:Number,y:Number,width:Number,height:Number):TextField{
var result:TextField=new TextField()
result.x=x
result.y=y
result.width=width
result.height=height
result.border=true
addChild(result)
return result
}
private function onbtnDown(event:MouseEvent){
drawS.graphics.clear()
var a=Number(aside.text)
var b=Number(bside.text)
var ag=Number(angle.text)
if(ag<180){
drawS.graphics.lineStyle(1)
drawS.graphics.moveTo(100,50)
drawS.graphics.lineTo(100+a,50)
drawS.graphics.lineTo(100+a-b*Math.cos(ag/180*Math.PI),50+b*Math.sin(ag/180*Math.PI))
drawS.graphics.lineTo(100,50)
addChild(drawS)
}else{
ctrl.text=”error”
}

}
}
}

[AS3]使用stage出错的问题。

2007-7-29 评论(1) 分类:技术文章 Tags:

这两天看AS3 cookbook和AS3的帮助文档,里面很多代码执行后都会出现“TypeError: Error #1009: 无法访问空对象引用的属性或方法。”这个错误。几经周折,才知道解决办法:使用addEventListener( Event.ADDED_TO_STAGE, enterDLHandle ),把要用的stage代码放到enterDLHandle里面,就没问题了。不知道有没有其他解决方法,知道的说声啊~

在经典论坛上提问这个问题,终于有人做出全面回答了,在此感谢zjs35

首先要明白stage是什么意思,stage是显示对象的一个引用舞台的属性,如果显示对象不在显示列表中,即没有用addChild()添加,stage等于null,你的问题就在这里。
使用stage有下面几种方法:
1、文档类的构造函数中可以直接使用stage属性
2、非文档类可以通过参数传递到类里面。
class Test extends Shape
{
function Test(stage:Stage)
{
}
}
3、不想传递参数时,要注意代码的顺序。
class Test extends Shape
{
function Test()
{
}
functon useStage()
{
trace(stage)
}
}
这样使用
var test=new Test()
test.useStage()//null,你的问题出在这里
addChild(test)//添加到显示列表后,就可以使用stage属性。
test.useStage()//[object Stage]
总之,理解stage是显示对象的属性,位于显示列表中的显示对象的stage才引用舞台