Macromedia Flex 制作計(jì)算器源碼和制作步驟
更新時(shí)間:2007年02月15日 00:00:00 作者:
這個(gè)計(jì)算器是由兩個(gè)部分組成:一個(gè)前臺(tái)界面的MXML文件,一個(gè)后臺(tái)控制器的AS文件。mxml文件負(fù)責(zé)顯示計(jì)算器的界面,as文件負(fù)責(zé)處理用戶發(fā)送的信息并計(jì)算結(jié)果。在這個(gè)教程中我們主要學(xué)習(xí):
[list]The Application class
The Panel container
The Label element
The Grid container
The Button element[/list]
ActionScript的主要學(xué)習(xí)內(nèi)容:
[list]A class definition
Properties
Methods
The if-else and switch-case control structures[/list]
==================== 創(chuàng) 建 界 面 ====================
創(chuàng)建一個(gè)空白的mxml文件,保存為calculator.mxml,一個(gè)符合標(biāo)準(zhǔn)的flex文件必須加入MX的類庫(kù)
xmlns:mx="http://www.macromedia.com/2003/mxml
因此,在calculator.mxml寫入下面的代碼:
==================== 創(chuàng) 建 主 面 板 ====================
計(jì)算器中所有的按鈕都集中在Panel元素中,因此我們首先要?jiǎng)?chuàng)建一個(gè)Panel面板,
并設(shè)置它的tittle屬性為:Calculator
在Application區(qū)域添加:
==================== 創(chuàng) 建 計(jì) 算 器 顯 示 屏 ====================
顯示屏其實(shí)是一個(gè)Label元素,它能夠顯示一行文字,Label元素有許多的屬性,在這里,我們使用一下集中屬性:
[list]id: Label的標(biāo)識(shí),類似Flash中的Instance Name
width: Label的寬度,單位:象素
text: Label的內(nèi)容
textAlign: 對(duì)齊方式: left | right | center [/list]
在Panel區(qū)域中添加如下代碼:
注意:在這里我們并沒(méi)有設(shè)置Label的text屬性,因?yàn)槲覀冞^(guò)會(huì)要通過(guò)后臺(tái)程序動(dòng)態(tài)顯示Label標(biāo)簽的內(nèi)容
==================== 創(chuàng) 建 Grid ====================
Grid好比是Flex的排版工具,類似與HTML中的表格,只有Grid確定下來(lái),我們才能對(duì)整個(gè)flex程序中的各種元素進(jìn)行定位
Grid標(biāo)簽由三個(gè)元素組成:
[list]Grid: 類似HTML中的<table>標(biāo)簽
GridRow: 類似HTML中的<tr>標(biāo)簽
GridItem: 類似HTML中的<td>標(biāo)簽[/list]
在這里我們添加一個(gè)5行4列的Grid,其中第一行和最后一行為三列,代碼如下:
Grid添加好后的效果為:

==================== 添 加 計(jì) 算 器 按 鈕 ====================
Flex的Button控件也類似于HTML的按鈕,在這里我們將使用按鈕的三種屬性:
[list]label: 按鈕上顯示的文字
width: 按鈕寬度
click: 按鈕按下時(shí)所響應(yīng)的事件[/list]
在Flex中每一個(gè)button控件都有相同的格式:
<mx:Button label="[something]" width="[number]" click="[some handler method]"/>
在我們上面制作的18個(gè)GridItem中依次添加1、2、3、4、5、6、7、8、9、0、.、+、-、*、/、=、Clear、C/E這些按鈕,如下:
Row1
Row2
Row3
Row4
Row5
完成后保存文件,添加好button后的效果如下:

==================== 創(chuàng) 建 后 臺(tái) 程 序 ====================
新建一個(gè)as文件,另存為 CalculatorController.as
先創(chuàng)建一個(gè)CalculatorController的類:
然后創(chuàng)建一個(gè)構(gòu)造器
在CalculatorController中聲明以下變量:
接著添加功能模塊:
“等于”的功能 doOperation()
輸入數(shù)字的功能 addNumber()
“C/E”的功能 clearEntry()
“Clear”的功能 clearAll()
“加、減、乘、除” 的功能 setOperation()
顯示屏的功能 setDisplay()
其他
==================== 最 終 完 整 的 代 碼 ====================
calculator.mxml
CalculatorController.as
原文地址:
www.macromedia.com/devnet/flex/articles/calculator_print.html
[list]The Application class
The Panel container
The Label element
The Grid container
The Button element[/list]
ActionScript的主要學(xué)習(xí)內(nèi)容:
[list]A class definition
Properties
Methods
The if-else and switch-case control structures[/list]
==================== 創(chuàng) 建 界 面 ====================
創(chuàng)建一個(gè)空白的mxml文件,保存為calculator.mxml,一個(gè)符合標(biāo)準(zhǔn)的flex文件必須加入MX的類庫(kù)
xmlns:mx="http://www.macromedia.com/2003/mxml
因此,在calculator.mxml寫入下面的代碼:
<?xml version="1.0"> <mx:Application xmlns:mx="http://www.macromedia.com/2003/mxml"> </mx:Application>
==================== 創(chuàng) 建 主 面 板 ====================
計(jì)算器中所有的按鈕都集中在Panel元素中,因此我們首先要?jiǎng)?chuàng)建一個(gè)Panel面板,
并設(shè)置它的tittle屬性為:Calculator
在Application區(qū)域添加:
<mx:Panel title="Calculator"> </mx:Panel>
==================== 創(chuàng) 建 計(jì) 算 器 顯 示 屏 ====================
顯示屏其實(shí)是一個(gè)Label元素,它能夠顯示一行文字,Label元素有許多的屬性,在這里,我們使用一下集中屬性:
[list]id: Label的標(biāo)識(shí),類似Flash中的Instance Name
width: Label的寬度,單位:象素
text: Label的內(nèi)容
textAlign: 對(duì)齊方式: left | right | center [/list]
在Panel區(qū)域中添加如下代碼:
<mx:Label id="calcDisplay" width="150" textAlign="right"/>
注意:在這里我們并沒(méi)有設(shè)置Label的text屬性,因?yàn)槲覀冞^(guò)會(huì)要通過(guò)后臺(tái)程序動(dòng)態(tài)顯示Label標(biāo)簽的內(nèi)容
==================== 創(chuàng) 建 Grid ====================
Grid好比是Flex的排版工具,類似與HTML中的表格,只有Grid確定下來(lái),我們才能對(duì)整個(gè)flex程序中的各種元素進(jìn)行定位
Grid標(biāo)簽由三個(gè)元素組成:
[list]Grid: 類似HTML中的<table>標(biāo)簽
GridRow: 類似HTML中的<tr>標(biāo)簽
GridItem: 類似HTML中的<td>標(biāo)簽[/list]
在這里我們添加一個(gè)5行4列的Grid,其中第一行和最后一行為三列,代碼如下:
<mx:Grid>
<mx:GridRow>
<mx:GridItem colSpan="2"></mx:GridItem>
<mx:GridItem></mx:GridItem>
<mx:GridItem></mx:GridItem>
</mx:GridRow>
<mx:GridRow>
<mx:GridItem></mx:GridItem>
<mx:GridItem></mx:GridItem>
<mx:GridItem></mx:GridItem>
<mx:GridItem></mx:GridItem>
</mx:GridRow>
<mx:GridRow>
<mx:GridItem></mx:GridItem>
<mx:GridItem></mx:GridItem>
<mx:GridItem></mx:GridItem>
<mx:GridItem></mx:GridItem>
</mx:GridRow>
<mx:GridRow>
<mx:GridItem></mx:GridItem>
<mx:GridItem></mx:GridItem>
<mx:GridItem></mx:GridItem>
<mx:GridItem></mx:GridItem>
</mx:GridRow>
<mx:GridRow>
<mx:GridItem></mx:GridItem>
<mx:GridItem ></mx:GridItem>
<mx:GridItem colSpan="2"></mx:GridItem>
</mx:GridRow>
</mx:Grid>Grid添加好后的效果為:

==================== 添 加 計(jì) 算 器 按 鈕 ====================
Flex的Button控件也類似于HTML的按鈕,在這里我們將使用按鈕的三種屬性:
[list]label: 按鈕上顯示的文字
width: 按鈕寬度
click: 按鈕按下時(shí)所響應(yīng)的事件[/list]
在Flex中每一個(gè)button控件都有相同的格式:
<mx:Button label="[something]" width="[number]" click="[some handler method]"/>
在我們上面制作的18個(gè)GridItem中依次添加1、2、3、4、5、6、7、8、9、0、.、+、-、*、/、=、Clear、C/E這些按鈕,如下:
Row1
width="70"
label="Clear"
click="calcController.clearAll()"
width="30"
label="C/E"
click="calcController.clearEntry()"
width="30"
label="+"
click="calcController.setOperation('add')"Row2
width="30"
label="1"
click="calcController.addNumber('1')"
width="30"
label="2"
click="calcController.addNumber('2')"
width="30"
label="3"
click="calcController.addNumber('3')"
width="30"
label="-"
click="calcController.setOperation('subtract')"Row3
width="30"
label="4"
click="calcController.addNumber('4')"
width="30"
label="5"
click="calcController.addNumber('5')"
width="30"
label="6"
click="calcController.addNumber('6')"
width="30"
label="*"
click="calcController.setOperation('multiply')"Row4
width="30"
label="7"
click="calcController.addNumber('7')"
width="30"
label="8"
click="calcController.addNumber('8')"
width="30"
label="9"
click="calcController.addNumber('9')"
width="30"
label="/"
click="calcController.setOperation('divide')"Row5
width="30"
label="0"
click="calcController.addNumber('0')"
width="30"
label="."
click="calcController.addNumber('.')"
width="70"
label="="
click="calcController.doOperation()"完成后保存文件,添加好button后的效果如下:

==================== 創(chuàng) 建 后 臺(tái) 程 序 ====================
新建一個(gè)as文件,另存為 CalculatorController.as
先創(chuàng)建一個(gè)CalculatorController的類:
class CalculatorController
{}然后創(chuàng)建一個(gè)構(gòu)造器
public function CalculatorController(){}在CalculatorController中聲明以下變量:
public var calcView:Object; private var reg1:String=""; private var reg2:String=""; private var result:Number; private var currentRegister:String="reg1"; private var operation:String="none"; private var r1:Number; private var r2:Number;
接著添加功能模塊:
“等于”的功能 doOperation()
public function doOperation():Void
{
r1=Number(reg1);
r2=Number(reg2);
switch (operation)
{
case "add":
result=r1+r2;
resetAfterOp();
break;
case "subtract":
result=r1-r2;
resetAfterOp();
break;
case "multiply":
result=r1*r2;
resetAfterOp();
break;
case "divide":
result=r1/r2;
resetAfterOp();
break;
default:
//do nothing
}
}輸入數(shù)字的功能 addNumber()
public function addNumber(n:String):Void
{
if (operation=="none" && currentRegister=="reg2")
{
reg1="";
setCurrentRegister();
}
this[currentRegister]+=n;
setDisplay(currentRegister);
}“C/E”的功能 clearEntry()
public function clearEntry():Void
{
this[currentRegister]="";
setDisplay(currentRegister);
}“Clear”的功能 clearAll()
public function clearAll():Void
{
reg1="";
reg2="";
setCurrentRegister();
setOperation("none");
setDisplay(currentRegister);
}“加、減、乘、除” 的功能 setOperation()
public function setOperation(operation:String):Void
{
this.operation=operation;
setCurrentRegister();
}顯示屏的功能 setDisplay()
private function setDisplay(register:String):Void
{
calcView.calcDisplay.text = this[register];
}其他
private function setCurrentRegister():Void
{
if (reg1=="")
{
currentRegister="reg1";
}
else
{
currentRegister="reg2";
}
}
private function resetAfterOp():Void
{
reg1=String(result);
reg2="";
setDisplay("reg1");
setOperation("none");
}==================== 最 終 完 整 的 代 碼 ====================
calculator.mxml
<?xml version="1.0"?>
<mx:Application xmlns:mx="http://www.macromedia.com/2003/mxml" xmlns="*">
<!-- calculator controller -->
<CalculatorController id="calcController" calcView="{this}"/>
<!-- calculator view -->
<mx:Panel title="Calculator">
<!-- calculator display -->
<mx:Label id="calcDisplay" width="150" textAlign="right"/>
<!-- calculator controls -->
<mx:Grid>
<mx:GridRow>
<mx:GridItem colSpan="2">
<mx:Button width="70" label="Clear" click="calcController.clearAll()"/>
</mx:GridItem>
<mx:GridItem>
<mx:Button width="30" label="C/E" click="calcController.clearEntry()"/>
</mx:GridItem>
<mx:GridItem>
<mx:Button width="30" label="+" click="calcController.setOperation('add')"/>
</mx:GridItem>
</mx:GridRow>
<mx:GridRow>
<mx:GridItem>
<mx:Button width="30" label="1" click="calcController.addNumber('1')"/>
</mx:GridItem>
<mx:GridItem>
<mx:Button width="30" label="2" click="calcController.addNumber('2')"/>
</mx:GridItem>
<mx:GridItem>
<mx:Button width="30" label="3" click="calcController.addNumber('3')"/>
</mx:GridItem>
<mx:GridItem>
<mx:Button width="30" label="-" click="calcController.setOperation('subtract')"/>
</mx:GridItem>
</mx:GridRow>
<mx:GridRow>
<mx:GridItem>
<mx:Button width="30" label="4" click="calcController.addNumber('4')"/>
</mx:GridItem>
<mx:GridItem>
<mx:Button width="30" label="5" click="calcController.addNumber('5')"/>
</mx:GridItem>
<mx:GridItem>
<mx:Button width="30" label="6" click="calcController.addNumber('6')"/>
</mx:GridItem>
<mx:GridItem>
<mx:Button width="30" label="*" click="calcController.setOperation('multiply')"/>
</mx:GridItem>
</mx:GridRow>
<mx:GridRow>
<mx:GridItem>
<mx:Button width="30" label="7" click="calcController.addNumber('7')"/>
</mx:GridItem>
<mx:GridItem>
<mx:Button width="30" label="8" click="calcController.addNumber('8')"/>
</mx:GridItem>
<mx:GridItem>
<mx:Button width="30" label="9" click="calcController.addNumber('9')"/>
</mx:GridItem>
<mx:GridItem>
<mx:Button width="30" label="/" click="calcController.setOperation('divide')"/>
</mx:GridItem>
</mx:GridRow>
<mx:GridRow>
<mx:GridItem>
<mx:Button width="30" label="0" click="calcController.addNumber('0')"/>
</mx:GridItem>
<mx:GridItem >
<mx:Button width="30" label="." click="calcController.addNumber('.')"/>
</mx:GridItem>
<mx:GridItem colSpan="2">
<mx:Button width="70" label="=" click="calcController.doOperation()"/>
</mx:GridItem>
</mx:GridRow>
</mx:Grid>
</mx:Panel>
</mx:Application>CalculatorController.as
/*
Calculator Controller
*/
class CalculatorController
{
// properties
// object to hold a reference to the view object
public var calcView:Object;
// registers to hold temporary values pending operation
private var reg1:String="";
private var reg2:String="";
// result of an operation
private var result:Number;
// the name of the register currently used
private var currentRegister:String="reg1";
// the name of the next operation to be performed
private var operation:String="none";
// for convenience, holder for numerical equivalents
// of the register string values
private var r1:Number;
private var r2:Number;
// constructor
public function CalculatorController()
{}
// methods
// perform the current operation on the 2 registers
public function doOperation():Void
{
// cast the register values to numbers
r1=Number(reg1);
r2=Number(reg2);
switch (operation)
{
case "add":
result=r1+r2;
resetAfterOp();
break;
case "subtract":
result=r1-r2;
resetAfterOp();
break;
case "multiply":
result=r1*r2;
resetAfterOp();
break;
case "divide":
result=r1/r2;
resetAfterOp();
break;
default:
// do nothing
}
}
// concatenate number to the value of the current register
public function addNumber(n:String):Void
{
if (operation=="none" && currentRegister=="reg2")
{
reg1="";
setCurrentRegister();
}
this[currentRegister]+=n;
setDisplay(currentRegister);
}
// clear the current register
public function clearEntry():Void
{
this[currentRegister]="";
setDisplay(currentRegister);
}
// clear both registers and the current operation
public function clearAll():Void
{
reg1="";
reg2="";
setCurrentRegister();
setOperation("none");
setDisplay(currentRegister);
}
// set the current operation
public function setOperation(operation:String):Void
{
this.operation=operation;
setCurrentRegister();
}
// set the value shown in the display
private function setDisplay(register:String):Void
{
calcView.calcDisplay.text = this[register];
}
// set which register is current
private function setCurrentRegister():Void
{
if (reg1=="")
{
currentRegister="reg1";
}
else
{
currentRegister="reg2";
}
}
// reset values after an operation
private function resetAfterOp():Void
{
reg1=String(result);
reg2="";
setDisplay("reg1");
setOperation("none");
}
}
原文地址:
www.macromedia.com/devnet/flex/articles/calculator_print.html
您可能感興趣的文章:
- javascript簡(jiǎn)單計(jì)算器 可美化
- javascript寫的簡(jiǎn)單的計(jì)算器,內(nèi)容很多,方法實(shí)用,推薦
- 關(guān)于Windows 不能在 本地計(jì)算器 啟動(dòng) Apache2(phpstudy)
- javascript-簡(jiǎn)單的計(jì)算器實(shí)現(xiàn)步驟分解(附圖)
- javascript計(jì)算當(dāng)月剩余天數(shù)(天數(shù)計(jì)算器)示例代碼
- 使用JavaScript 編寫簡(jiǎn)單計(jì)算器
- javascript白色簡(jiǎn)潔計(jì)算器
- 純javascript代碼實(shí)現(xiàn)計(jì)算器功能(三種方法)
- c++編寫簡(jiǎn)單的計(jì)算器程序
- 簡(jiǎn)單實(shí)現(xiàn)C++復(fù)數(shù)計(jì)算器
相關(guān)文章
Flex結(jié)合JavaScript讀取本地路徑的方法
鑒于adobe并沒(méi)有提供FileReference對(duì)瀏覽的文件的完整路徑的接口。只能采用JS和fileinput控件來(lái)獲取本地路徑了。2009-02-02
基于Socket的網(wǎng)絡(luò)連接 Flex與.NET互操作(一)
Flash/Flex也支持基于Socket的網(wǎng)絡(luò)連接 ,服務(wù)器端可以是C++,VB,C#,Java等任一語(yǔ)言開發(fā)。監(jiān)聽(tīng)一個(gè)網(wǎng)絡(luò)端口便可以接收到Flash/Flex開發(fā)的客戶端的連接。2009-06-06
Flex與.NET互操作 使用FileReference+HttpHandler實(shí)現(xiàn)文件上傳/下載
Flex與.NET互操作 使用FileReference+HttpHandler實(shí)現(xiàn)文件上傳/下載2009-06-06
flex 簡(jiǎn)單例子(含實(shí)例效果圖 源碼)
要過(guò)節(jié)了,工作任務(wù)也完成了,閑來(lái)沒(méi)事,研究svg,感覺(jué)市場(chǎng)上對(duì)svg支持度不高,導(dǎo)致了這項(xiàng)技術(shù)不能夠被IT群眾充分的接納,一個(gè)沒(méi)有人支持的技術(shù),她必然也不會(huì)有很大的前景。研究來(lái)研究去,還是覺(jué)得flex比較好玩。2009-09-09
Flex Javascript交互實(shí)現(xiàn)代碼
刪除swf這里需要提醒下,因?yàn)閑mbedSWF是替換標(biāo)簽,而不是填充。2009-06-06
Flex include和import ActionScript代碼
為了讓你的MXML代碼可讀性增強(qiáng),你可以在<mx:Script>標(biāo)簽內(nèi)引用ActionScript代碼文件,而不是把大塊的代碼都插入到<mx:Script>里。引用ActionScript有include和import兩種方式。2009-08-08

