2 Adobe Flex Builder
2 Adobe Flex Builder
XML ............................................................................................................
..........................................................................................................
XML DOM ..........................................................................................................
Reading XML Data .................................................................
Writing to and Editing XML Objects ......................
.................................................................................................................... Reflection
Import and Include .................................................................................
Flex Class Library ...............................................................
Data Providers and Collections ................................
......................................................................................
...................................................... Using ActionScript to Create Visual Components
........................................................................................................................
................................................
........................................................................................................
.........................................................................................
............................................................................................
.............................................................................................
...........................................................................................
...........................................................................................................................
.
/
.
:
.
.
[email protected]
Xml
.
.
Flex2.0
Intel Pentium 4 processor
Microsoft Windows XP with Service Pack 2, Windows XP
Professional, Windows 2000 Server, Windows 2000 Pro, or
Windows Server 2003
)512MB of RAM (1GB recommended
300MB of available hard-disk space
Java Virtual Machine: Sun JRE 1.4.2, Sun JRE 1.5, IBM JRE
1.4.2
Mac :
)PowerPC or Mactel (1GHz or greater
Mac OS X 10.4.7
1GB of RAM recommended
300MB of available hard-disk space
Java Virtual Machine: Sun JRE 1.5
)Eclipse 3.2 (plugin configuration only
Flex 2.0
Add SWC Folder Add
SWC button
- :
.
- :
.
Flex
framework
MXML file
MXML
html xml .
.tags
MXML
ActionScript 3.0
MXML tags
.
ActionScript
3.0
)(a combo box or data grid for example
txt xml
CSS
Graphic
assets
Data
:
.
: .
: SWF .
mxml
:
>?"<?xml version="1.0" encoding="utf-8
"<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml
>"layout="absolute
><mx:Panel
><mx:TextArea text="Say hello to Flex!" /
><mx:Button label="Close" /
></mx:Panel
></mx:Application
xml
xml
..
Flex2
>?"<?xml version="1.0" encoding="utf-8
"<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml
>"layout="absolute
></mx:Application
.
: mxml mx namespace
.flex
swf
. Mozilla firefox
MXML
MXML AS 3.0
Flex MXML swf
. swf
:
><mx:Script
[<![CDATA
...
>]]
></mx:Script
Using ActionScript
Inline within MXML tags
MXML
"<mx:Button id="alertButton" label="Show Alert
>click="mx.controls.Alert.show('Example')" /
Show Alert
.
Nested within MXML tags
Mxml
CDATA block
><mx:Button
><mx:click
[<![CDATA
;)"mx.controls.Alert.show("Example
>]]
></mx:click
></mx:Button
In MXML scripts
> <mx:Script [ <![CDATA ]]
></mx:Script
><mx:Script
[<![CDATA
;import mx.controls.Alert
{ private function example( ):void
;)"Alert.show("Example
}
>]]
></mx:Script
Within ActionScript classes
><mx:Script source="code.as" /
MXML and ActionScript Correlations
MXML
MXML
><mx:Button id="button" /
;) (var button:Button = new Button
><mx:Button id="button" label="Click" /
;) (var button:Button = new Button
;"button.label = "Click
MXML
.
MXML
ID
<mx:TextInput id="myTextInput" text="Refer to me via the id
>property" /
ID
MXML myTextInput
TextInput
MXML
>?"<?xml version="1.0" encoding="utf-8
"<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml
"verticalAlign="middle
"horizontalAlign="center
>"*"=xmlns
><mx:Script
[<![CDATA
public function getText():String
{
return myTextInput.text;
}
]]>
</mx:Script>
<mx:TextInput id="myTextInput" text="Refer to me via the id
property" />
</mx:Application>
myTextInput getText()
. ID :
ID This :
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
verticalAlign="middle"
horizontalAlign="center">
<mx:Script>
<![CDATA[
import mx.controls.Alert;
import mx.controls.TextInput;
public function getText():String
{
return this["myTextInput"].text;
}
]]>
</mx:Script>
<mx:TextInput id="myTextInput" text="Hello World!" />
<mx:Button label="Get Text" click="Alert.show(getText())" />
</mx:Application>
Understanding Packages
.
Scope .
Scope
.
Scope
.Different Scope
Button Class mx.Controls
mx.controls.Button
mx.controls.Button
Button :
;var button:mx.controls.Button
Constructor
;) (button = new mx.controls.Button
;import mx.controls.Button
;var button:mx.controls.Button
Declaring Classes
as
Example Example.as
:
{ package com.example
;import flash.net.URLLoader
;import flash.net.URLRequest
{ public class Example
//
}
}
Package declarations
Example. as Com
Com.Example
.
:
{ package com.example
// Import
// Class declaration
}
Import statements
URLLoader URLRequest flash.net
{ package com.example
;import flash.net.URLLoader
;import flash.net.URLRequest
// Class declaration goes here.
}
Description
One or more characters,
including all Unicode
characters
Data type
String
Number
int
uint
Boolean
Date
An index-ordered
collection of data
Array
True or false
String
;var userName:String
= :
;"userName = "michael
:
;textInput.text = userName
: .
Scope
Scope :
.
1- public
2- private
.
3- protected
.
4- Internal
.
protected Private
public Internal
_
:
{ package com.example
;import flash.net.URLLoader
;import flash.net.URLRequest
{ public class Example
;private var _loader:URLLoader
}
}
_loader URLLoader Static
:
{ package com.example
;import flash.net.URLLoader
;import flash.net.URLRequest
{ public class Example
;private var _loader:URLLoader
;static private var _instance:Example
}
}
Constant
Event.COMPLETE, MouseEvent.CLICK, TimerEvent.TIMER, and
Math.PI.
{ package com.example
;import flash.net.URLLoader
;import flash.net.URLRequest
{ public class Example
;private var _loader:URLLoader
;static private var _instance:Example
;"static public const TEST:String = "test constant
}
}
Methods
:
.
package com.example {
import flash.net.URLLoader;
import flash.net.URLRequest;
public class Example {
private var _loader:URLLoader;
static private var _instance:Example;
private var _sampleProperty:String;
public function get sampleProperty( ):String {
return _sampleProperty;
}
public function set sampleProperty(value:String):void {
_sampleProperty = value;
}
static public const TEST:String = "test constant";
public function Example( ) {
_loader = new URLLoader( );
}
public function traceMessage(message:String):void {
trace("Your message is " + message);
}
static public function getInstance( ):Example {
if(_instance == null) {
_instance = new Example( );
}
return _instance;
}
}
}
var example:Example = new Example( );
example.sampleProperty = "A";
// A Setter
trace(example.sampleProperty); // Call the getter
Statements
:
total = unitValue * quantity;
trace("This is a simple statement.");
Looping statements
i
i
.
For..............
for
;i=0
;i<1000
i++
x
i=0 i++
i<100
0
1
2
3
4
.
.
.
99
:
>?"<?xml version="1.0" encoding="utf-8
"<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml
"verticalAlign="middle
"horizontalAlign="center
>"*"=xmlns
><mx:Script
[<![CDATA
public function enumerateObject():void
{
** ..........
while
X<100
;x++
X ) X
X
.
while do while
) (while
) do
(while
) (do
) (do while
) (while .
Nested Loops
;var i:Number = 0
{ )while (++i <= 10
;var j:Number = 0
{ )while (++j <= 10
// perform these actions
}
}
..
.
:If
.
) True (False:
;myNumber = 10
{)if(myNumber < 20
;)"trace("myNumber is less than 20
}
: myNumber
} {
trace
} {
) ( If
} {
:elseIf
:
;myNumber = 10
{)if(myNumber > 20
;)trace("myNumber is greater than 20
}
{Else
;)trace("myNumber is less than or equal to 20
}
: myNumber
} {
trace
else
-: ifElse
if else if
;myNumber = 10
{)if(myNumber < 20
;)"trace("myNumber is less than 20
}
{)else if(myNumber < 50
;)"trace("myNumber is less than 50 but greater than or equal to 20
-:or and if
on (press) {
if ((a == 7) and (b == 15)) {
gotoAndPlay(20);
}
}
-:
on (press) {
if ((a == 7) or (b == 15)) {
gotoAndPlay(20);
}
}
-: if
myNumber = 10;
if(myNumber < 20){
trace("myNumber is less than 20");
}
else if(myNumber < 50){
trace("myNumber is less than 50 but greater than or equal to
20");
}
else{
trace("myNumber is greater than or equal to 50");
}
[\]^[\]^[\]^
-:switch . Case
..
{)( switch
: case
: case
...
][default
}
The switch Statement
{)switch (expression
case caseClause1:
code block
case caseClause2:
code block
...
][default
}
-:
x
case 1 .
;x = 10
{) switch( x
case 10:
;)"trace("case 1
;break
case 10:
;)"trace("case 2
;break
}
-:
;"exp = "hello
{) switch( exp
case "hello":
;)"trace("case 1
case "hi":
;)"trace("case 2
;break
}
case 1
if -: switch
{) switch( exp
case 1:
//do task a
case 2:
//do task b
case 3:
//do task c
}
if -:
{) if( x == 3
//do task c
}
{) else if( x == 2
//do task b
//do task c
}
{) else if( x == 1
//do task a
//do task b
//do task c
}
-: switch
{) switch( user_command_string
case "move north":
case "go north":
case "north":
case "n":
;)"trace("you have moved north
;break
case "move south":
case "go south":
case "south":
case "s":
;)"trace("you have moved south
;break
default:
;)trace("I'm sorry, I don't understand "+ user_command_string
}
: ) (switch
) (true
) (true ) (false
). (default
array
.
..
..
!
..!
" "
.
Array
.Index
;)(var array:Array = new Array
:
//
var letters:Array = ["a", "b", "c", "d", "a", "b", "c", "d"];
//
var match:String = "b";
// for
for (var i:int = 0; i < letters.length; i++) {
//
if (letters[i] == match) {
trace("Element with index " + i +
" found to match " + match);
// break
break;
}
}
:
var letters:Array = ["a", "b", "c", "d", "a", "b", "c", "d"];
var match:String = "b";
//
// the "b" is at index 5.
for (var i:int = letters.length - 1; i >= 0; i--) {
if (letters[i] == match) {
trace("Element with index " + i +
" found to match " + match);
break;
}
}
//The class is in the ascb.util package
import ascb.util.ArrayUtilities;
var letters:Array = ["a", "b", "c", "d"];
trace(ArrayUtilities.findMatchIndex(letters, "b"));
// Displays: 1
trace(ArrayUtilities.findMatchIndex(letters, "r"));
// Displays: -1
findMatchIndex( ), findLastMatchIndex( ), and findMatchIndices( ).
:
public static function findMatchIndex(array:Array,
element:Object):int {
//
//
var startingIndex:int = 0;
var partialMatch:Boolean = false;
if(typeof arguments[2] == "number") {
startingIndex = arguments[2];
}
else if(typeof arguments[3] == "number") {
startingIndex = arguments[3];
}
if(typeof arguments[2] == "boolean") {
partialMatch = arguments[2];
}
var match:Boolean = false;
for(var i:int = startingIndex;
i < array.length; i++) {
if(partialMatch) {
match = (array[i].indexOf(element) != -1);
}
else {
match = (array[i] == element);
}
if(match) {
return i;
}
}
return -1;
}
:
splice( )
pop( )
shift( )
.
:
var numbers:Array = new Array(4, 10);
numbers[4] = 1;
trace(numbers); // Displays: 4,10,undefined,undefined,1
for(var i:int = 0; i < numbers.length; i++) {
if(numbers[i] == undefined) {
numbers.splice(i, 1);
}
}
trace(numbers); // Displays: 4,10,undefined,1
var numbers:Array = new Array(4, 10);
numbers[4] = 1;
trace(numbers); // Displays: 4,10,undefined,undefined,1
for(var i:int = 0; i < numbers.length; i++) {
if(numbers[i] == undefined) {
numbers.splice(i, 1);
i--;
}
}
trace(numbers); // Displays: 4,10,1
:
var letters:Array = ["a", "b", "c", "d"];
//
// into letters starting at index 1.
letters.splice(1, 2, "r", "s", "t");
// :
// "a", "r", "s", "t", and "d".
for (var i:int = 0; i < letters.length; i++) {
trace(letters[i]);
}
:
var list:String = "Peter Piper picked a peck of pickled peppers";
//
scores.sort(Array.NUMERIC);
trace(scores); // Displays: 2,5,6,8,10,14,19,20
Array.UNIQUESORT
bandNameSort sort()
"Led Zeppelin",
"The Beatles",
"Aerosmith",
"Cream"];
bands.sort(bandNameSort);
for(var i:int = 0; i < bands.length; i++) {
trace(bands[i]);
/* output:
Aerosmith
The Beatles
The Clash
Cream
Led Zeppelin
The Who
*/
}
function bandNameSort(band1:String, band2:String):int
{
band1 = band1.toLowerCase( );
band2 = band2.toLowerCase( );
if(band1.substr(0, 4) == "the ") {
band1 = band1.substr(4);
}
if(band2.substr(0, 4) == "the ") {
band2 = band2.substr(4);
}
if(band1 < band2) {
return -1;
}
else {
return 1;
}
}
bandNameSort( )
the
var cars:Array = new Array();
cars.push(["maroon", 1997, "Honda"]);
cars.push(["beige", 2000, "Chrysler"]);
cars.push(["blue", 1985, "Mercedes"]);
public static function equals(arrayA:Array,
arrayB:Array,
bNotOrdered:Boolean):Boolean {
//
if(arrayA.length != arrayB.length) {
return false;
}
//
var arrayACopy:Array = arrayA.concat( );
var arrayBCopy:Array = arrayB.concat( );
//
if(bNotOrdered) {
arrayACopy.sort( );
arrayBCopy.sort( );
}
//
// false
for(var i:int = 0; i < arrayACopy.length; i++) {
if(arrayACopy[i] != arrayBCopy[i]) {
delete arrayACopy;
delete arrayBCopy;
return false;
}
}
// true
delete arrayACopy;
delete arrayBCopy;
return true;
}
var members:Object = new Object( );
members.scribe = "Franklin";
members.chairperson = "Gina";
members.treasurer = "Sindhu";
trace(members.scribe); // Displays: Franklin
var members:Object = new Object( );
members.scribe = "Franklin";
members.chairperson = "Gina";
members.treasurer = "Sindhu";
Inheritance
Subclass extends
A
B :
{ package com.example
;import com.example.A
{ public class B extends A
}
}
public protected
private
internal
A .B
{ package com.example
{ public class A
;private var _one:String
;protected var _two:String
{ ) (public function A
;) (initialize
}
{ private function initialize( ):void
;"_one = "one
;"_two = "two
}
{ public function run( ):void
;)"trace("A
}
}
}
B A B
_two and run( ),
_one or initialize( ).
Polymorphism
:
Over loading - :
.
.
Overriding - :
Overriding
) Subclass
( Derived Class Parent Class
Base class
.
override
override :run
(keyword in the method declaration; the following overrides the run
) method:
{ package com.example
;import com.example.A
{ public class B extends A
{ override public function run( ):void
;)"trace("B
}
}
}
Handling Events
.timers
:
- Event object .Event class
- . Event Listener
. Mouse Event Class
) ( addEventListener
;)object.addEventListener("eventName", listenerFunction
:
>?"<?xml version="1.0" encoding="utf-8
"<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml
"layout="absolute
>")initialize="initializeHandler(event
><mx:Script
[<![CDATA
;import mx.controls.Alert
{ private function initializeHandler(event:Event):void
;)button.addEventListener(MouseEvent.CLICK, clickHandler
}
{ private function clickHandler(event:MouseEvent):void
;)) (Alert.show(event.toString
}
>]]
></mx:Script
><mx:Button id="button" /
></mx:Application
Mouse Event
Flex2
Constant CLICK :
DOUBLE_CLICK
MOUSE_DOWN
MOUSE_MOVE
MOUSE_OUT
MOUSE_OVER
MOUSE_UP
MOUSE_WHEEL
ROLL_OUT
ROLL_OVER
KeyboardEvent
. KEY_DOWN
removeEventListener
:
;)button.removeEventListener(MouseEvent.CLICK, onClick
Error Handling
Runtime Error
.
:
// }
finally {
//
}
flex2
flash player
FileReference browse
:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
layout="absolute"
initialize="initializeHandler(event)">
<mx:Script>
<![CDATA[
import flash.net.FileReference;
private function initializeHandler(event:Event):void {
var file:FileReference = new FileReference( );
file.browse( );
file.browse( );
}
]]>
</mx:Script>
</mx:Application>
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
layout="absolute"
initialize="initializeHandler(event)">
<mx:Script>
<![CDATA[
import flash.net.FileReference;
private function initializeHandler(event:Event):void {
var file:FileReference = new FileReference( );
try {
file.browse( );
file.browse( );
}
catch(error:Error) {
errors.text += error + "\n";
}
}
>]]
></mx:Script
><mx:TextArea id="errors" /
></mx:Application
Handling Asynchronous Errors
flex2
>?"<?xml version="1.0" encoding="utf-8
"<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml
"layout="absolute
>")initialize="initializeHandler(event
><mx:Script
[<![CDATA
{ private function initializeHandler(event:Event):void
;) (var loader:URLLoader = new URLLoader
// security sandbox
;))"loader.load(new URLRequest("data.xml
loader.addEventListener(SecurityErrorEvent.SECURITY_ERROR,
;)securityErrorHandler
}
private function
{ securityErrorHandler(event:SecurityErrorEvent):void
;"errors.text += event + "\n
}
>]]
></mx:Script
><mx:TextArea id="errors" /
></mx:Application
XML
XML ..
XML .
Binary Files
.. XML
..
eXtensible Markup Language
XML HTML
.
XML XML
.
Michael nabil
HTML .
><html
><head><title>name></title></head
><body
><p> Michael nabil </p
></body
></html
XML .
><name
><first> Michael</first
><last> nabil </last
></name
Name
><first > <last
.
name.xml
.
XML
) (- > <name
.
Style Sheet
XML .
CSS XML XML
XSL
XSLT XML
. .
Document Object Model DOM XML
DHTML JavaScript
Document.write .
XML
XML
Object
model . XML
Parent / Child
/ .
elements .
> < Name > < First > < First <
> Name > < First> < Middle > < Last
>< Name
Emad <
>. First Tree
Branches Leaves
:
Element Content
> < Name element content
.
Simple Content
) (Tag
> < HTML
Elements XML
....
Tag
Start Tag
. End Tag . /
XML
Element .
Element Content
Element content
PCDATA
PCDATA >< middle
PCDATA
Root Element
> < name > < /name
Root Element
XML XML
Well-formed XML Documents
-
XML .
XML Case-Sensitive
XML .
-:
XML
.
-:
(_)underscore .
" _
" " ".
-
XML .
>
(
Attributes
XML attributes
. XML
.
Metadata
XML
Nickname
.
flash player Xml
)1- a legacy XMLDocument class (XML DOM
2- new XML class that implements the ECMAScript for XML (E4X) standard.
Xml
Xml
http://www.c4arab.com
:
XML
XML DOM
Xml xml literals . xml constructor
xml literals xml .
nabil
var authors:XMLList = xml.book.authors.author.(@last == "nabil");
for(var i:uint = 0; i < authors.length( ); i++) {
trace(authors[i].parent().parent().toXMLString( ));
}
Writing to and Editing XML Objects
:
var classReference:Class =
Class(getDefinitionByName("flash.net.URLLoader"));
var instance:Object = new classReference( );
var loader:URLLoader = new URLLoader( );
var className:String = getQualifiedClassName(loader);
var classReference:Class =
Class(getDefinitionByName(className));
var instance:Object = new classReference( );
Class Introspection
: describeType( )
URLLOADER :
var loader:URLLoader = new URLLoader( );
var description:XML = describeType(loader);
trace(description);
<type name="flash.net::URLLoader"
base="flash.events::EventDispatcher"
isDynamic="false" isFinal="false" isStatic="false">
<metadata name="Event">
<arg key="name" value="httpStatus"/>
<arg key="type" value="flash.events.HTTPStatusEvent"/>
</metadata>
<metadata name="Event">
<arg key="name" value="securityError"/>
<arg key="type" value="flash.events.SecurityErrorEvent"/>
</metadata>
<metadata name="Event">
<arg key="name" value="ioError"/>
<arg key="type" value="flash.events.IOErrorEvent"/>
</metadata>
<metadata name="Event">
<arg key="name" value="progress"/>
<arg key="type" value="flash.events.ProgressEvent"/>
</metadata>
<metadata name="Event">
<arg key="name" value="complete"/>
<arg key="type" value="flash.events.Event"/>
</metadata>
<metadata name="Event">
<method name="hasEventListener"
declaredBy="flash.events::EventDispatcher"
returnType="Boolean">
<parameter index="1" type="String" optional="false"/>
</method>
<method name="removeEventListener"
declaredBy="flash.events::EventDispatcher"
returnType="void">
<parameter index="1" type="String" optional="false"/>
<parameter index="2" type="Function" optional="false"/>
<parameter index="3" type="Boolean" optional="true"/>
</method>
</type>
:
.Including
>. <mx:Script
:
><mx:Script
[<![CDATA
;"include "filename.as
>]]
></mx:Script
>"<mx:Script source="filename
components
Flex
Flex
:
- .
- .
-
.
: TextInput
.
package myComponents
{
public class MyTextInput extends TextInput
{
)(public function MyTextInput
{
...
}
...
}
}
Tree control
DataGrid control
ComboBox control
List control
TileList control
Menu control
MenuBar control
ButtonBar control
LinkBar control
TabBar control
ToggleButtonBar control
LineChart control
ColorPicker control
PopUpMenuButton control
HorizontalList control
Repeater component
DateField control
data provider
. dataProvider
data provider raw data object
. collection classes
Raw objects
.
Array (raw object)
Array Collection
two Button controls
addCountryToArray()
addCountryToCollection()
. data providers TextInput
<?xml version="1.0"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">
<mx:Script>
<![CDATA[
import mx.collections.ArrayCollection;
[Bindable]
public var myArray:Array = ["United States", "South
Africa", "United
Kingdom"];
[Bindable]
public var myCollection:ArrayCollection = new
ArrayCollection
(["United States", "South Africa", "United Kingdom"]);
public function addCountryToArray(country:String):void
{
myArray.push(country);
}
public function
addCountryToCollection(country:String):void
{
myCollection.addItem(country);
}
]]>
</mx:Script>
<mx:TextInput id="countryTextInput" text="Argentina" />
<mx:Label text="Bound to Array (raw object)" />
<mx:Button click="addCountryToArray(countryTextInput.text)"
label="Add Country
to Array" />
<mx:List dataProvider="{myArray}" width="200" />
<mx:Label text="Bound to Collection" />
<mx:Button
click="addCountryToCollection(countryTextInput.text)" label="Add
Country to Collection" />
<mx:List dataProvider="{myCollection}" width="200" />
</mx:Application>
the Button control labeled Add Country to Array
. first List control
Using ActionScript to Create Visual Components
addChild() or addChildAt()
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
verticalAlign="middle"
horizontalAlign="center"
xmlns="*">
<mx:Script>
<![CDATA[
import mx.controls.TextInput;
public function createComponent():void
{
var t:TextInput = new TextInput();
t.text = "This component was created at runtime";
this.addChild(t);
}
]]>
</mx:Script>
<mx:Button label="Create Component"
click="createComponent()" />
</mx:Application>
.
/ :
.
.
. Bios
.
. windows xp
.
.
.
- Windows xp
- Microsoft word 2007
- Microsoft Excel 2007
- Microsoft power point 2007
- Microsoft access 2007
. Action script3.0
- flex 2.0
.
.
Action script
2.0
.
.
Programming Flex 2
ActionScrpt 3 Cookbook
Essential ActionScript 3