Detecting when the source changes on an Image control in Flex
The following example shows how you can detect when the source property has changed on a Flex Image control using the sourceChanged event.
Full code after the jump.
<?xml version="1.0" encoding="utf-8"?>
<!-- http://blog.flexexamples.com/2008/06/27/detecting-when-the-source-changes-on-an-image-control-in-flex/ -->
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
layout="vertical"
verticalAlign="middle"
backgroundColor="white">
<mx:Script>
<![CDATA[
import mx.controls.Alert;
private function init():void {
img.addEventListener("sourceChanged", image_sourceChanged);
}
private function image_sourceChanged(evt:Event):void {
Alert.show(evt.toString(), evt.type);
}
]]>
</mx:Script>
<mx:ApplicationControlBar dock="true">
<mx:Button label="Flash"
click="img.source = 'assets/fl_appicon.jpg';" />
<mx:Button label="Flash Player"
click="img.source = 'assets/fl_player_appicon.jpg';" />
<mx:Button label="Flex"
click="img.source = 'assets/fx_appicon.jpg';" />
</mx:ApplicationControlBar>
<mx:Image id="img"
source="assets/fx_appicon.jpg"
initialize="init();"
width="100"
height="100" />
</mx:Application>
View source is enabled in the following example.
Due to popular demand, here is the “same” example in a more ActionScript friendly format:
<?xml version="1.0" encoding="utf-8"?>
<!-- http://blog.flexexamples.com/2008/06/27/detecting-when-the-source-changes-on-an-image-control-in-flex/ -->
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
layout="vertical"
verticalAlign="middle"
backgroundColor="white"
initialize="init();">
<mx:Script>
<![CDATA[
import mx.containers.ApplicationControlBar;
import mx.controls.Alert;
import mx.controls.Button;
import mx.controls.Image;
private var button1:Button;
private var button2:Button;
private var button3:Button;
private var img:Image;
private function init():void {
button1 = new Button();
button1.label = "Flash";
button1.addEventListener(MouseEvent.CLICK, function():void {
img.source = "assets/fl_appicon.jpg";
});
button2 = new Button();
button2.label = "Flash Player";
button2.addEventListener(MouseEvent.CLICK, function():void {
img.source = "assets/fl_player_appicon.jpg";
});
button3 = new Button();
button3.label = "Flex";
button3.addEventListener(MouseEvent.CLICK, function():void {
img.source = "assets/fx_appicon.jpg";
});
var appControlBar:ApplicationControlBar = new ApplicationControlBar();
appControlBar.dock = true;
appControlBar.addChild(button1);
appControlBar.addChild(button2);
appControlBar.addChild(button3);
Application.application.addChildAt(appControlBar, 0);
img = new Image();
img.source = "assets/fx_appicon.jpg";
img.width = 100;
img.height = 100;
img.addEventListener("sourceChanged", image_sourceChanged);
addChild(img);
}
private function image_sourceChanged(evt:Event):void {
Alert.show(evt.toString(), evt.type);
}
]]>
</mx:Script>
</mx:Application>
Peter deHaan
Peter deHaan currently works for Adobe on the Flex SDK QA team. While not working on Flex, Flash, and ColdFusion applications, Peter enjoys making up bios and writing in 3rd person. Peter's rarely updated blog can be found at blogs.adobe.com/pdehaan/, actionscriptexamples.com, airexamples.com, and coldfusionexamples.com.
-
Add Widgets (Content Sidebar)
This is your Content Sidebar. Edit this content that appears here in the widgets panel by adding or removing widgets in the Content Sidebar area.
8 Responses to Detecting when the source changes on an Image control in Flex
Leave a Reply Cancel reply
-
Categories
- Accordion
- AccordionHeader
- ActionScript
- AddChild
- AdvancedDataGrid
- Alert
- alpha
- Animate
- AnimateProperties
- Application
- Application (Spark)
- ArrayCollection
- BarChart
- baseColor
- beta
- beta1
- beta2
- Bitmap
- Bitmap/BitmapData
- BitmapData
- BitmapFill
- BitmapFill (Spark)
- BitmapGraphic
- BitmapImage
- BitmapImage (Spark)
- BitmapImageResizeMode
- Border (Spark)
- BorderContainer (Spark)
- Box
- BuildInfo
- Button
- Button (Spark)
- ButtonBar
- ButtonBar (Spark)
- ByteArray
- Camera
- Charting
- CheckBox
- CheckBox (Spark)
- ClassFactory
- CollectionEvent
- Color
- ColorPicker
- ColorUtil
- ComboBox
- ComboBoxArrowSkin
- Compiler
- Component
- Component (Spark)
- Configuration
- Container
- ContextMenu
- ContextMenuEvent
- ContextMenuItem
- CSSCondition
- CSSSelector
- CSSStyleDeclaration
- CurrencyFormatter
- CursorManager
- Data Binding
- DataGrid
- DataGrid (Spark)
- DataGridColumn
- Date
- DateBase
- DateChooser
- DateField
- DateFormatter
- Debugging
- DefaultComplexItemRenderer
- DefaultTileListEffect
- DropDownList
- DropDownList (Spark)
- DropDownListButtonSkin
- DropDownListSkin
- DropShadowFilter
- E4X
- Effects
- Ellipse
- EmailValidator
- Embed
- Event
- Fade
- FileFilter
- FileReference
- fill
- Filters
- Flash
- Flash Integration
- FlashVars
- Flex 3 SDK
- Flex Builder
- Flex Builder 3
- Flex SDK
- Flex4
- FLVPlayback
- FocusManager
- FontLookup
- Fonts
- Form
- Form (Spark)
- FormHeading (Spark)
- FormItem
- FormItem (Spark)
- Forms
- FTETextField (Spark)
- FullScreen
- FullScreenEvent
- FxAnimateColor
- FxButtonBar
- FxCheckBox
- FXG
- FxHScrollBar
- FxHSlider
- FxList
- FxNumericStepper
- FxRadioButton
- FxRotate3D
- FxScroller
- FxTextArea
- FxTextInput
- FxToggleButton
- FxVScrollBar
- FxVSlider
- getStyleDeclaration()
- GradientEntry
- Graphic (Spark)
- HBox
- HDividedBox
- HGroup (Spark)
- HorizontalLayout
- HorizontalList
- HSBColor (Spark)
- HScrollBar (Spark)
- HSlider
- HSlider (Spark)
- HTML template
- ID3Info
- Image
- Image (Spark)
- ImageSnapshot
- itemRenderer
- JointStyle
- Label
- Label (Spark)
- Legend
- LegendItem
- LigatureLevel
- Line
- LinearGradientStroke
- LineScaleMode
- LinkBar
- LinkButton
- List
- List (Spark)
- Menu
- MenuBar
- Metadata
- MetadataEvent
- Model
- Mouse
- MouseCursor
- MouseEvent
- Move
- Namespace
- NavigatorContent (Spark)
- needsSWF
- NetConnection
- NetStream
- Nightly Builds
- NumberBaseRoundType
- NumberFormatter
- NumberValidator
- NumericCompare
- NumericStepper
- NumericStepper (Spark)
- ObjectProxy
- ObjectUtil
- paddingLeft
- paddingRight
- Panel
- Panel (Spark)
- Parallel
- Path
- PieChart
- PieSeries
- PieSeriesItem
- PopUpAnchor (Spark)
- PopUpButton
- PopUpManager
- ProgrammaticSkin
- ProgressBar
- PropertyChangeEvent
- QName
- RadialGradient
- RadioButton
- RadioButton (Spark)
- RadioButtonGroup
- RadioButtonGroup (Spark)
- Rect
- RegExp
- Regular Expressions
- Repeater
- RichEditableText
- RichText
- RichText (Spark)
- RichTextEditor
- Rotate
- Rotate3D (Spark)
- Scroller (Spark)
- Sequence
- setStyle()
- SimpleText
- SimpleText (Spark)
- skinClass
- Slider
- SliderEvent
- SolidColor
- SolidColorStroke
- Sort
- SortField
- Sound
- SoundEffect
- Spinner (Spark)
- SpriteVisualElement (Spark)
- StageDisplayState
- States
- StringUtil
- StringValidator
- StyleManager
- Styles
- SWFLoader
- SWFObject
- System
- SystemManager
- TabBar
- TabBar (Spark)
- TabNavigator
- TabStopFormat
- Text
- Text Layout Framework (TLF)
- TextArea
- TextArea (Spark)
- TextBox
- TextConverter
- TextEvent
- TextFlow
- TextFlowUtil
- TextFormat
- TextGraphic
- TextInput
- TextInput (Spark)
- TextLayoutFormat
- TextView
- Themes
- TileLayout
- TileList
- TileOrientation
- Timer
- TitleWindow
- TitleWindow (Spark)
- TLF
- ToggleButton (Spark)
- ToggleButtonBar
- ToolTip
- Transition
- Tree
- TruncationOptions
- UIComponent
- UIFTETextField
- Updater
- URLLoader
- URLRequest
- URLUtil
- URLVariables
- ValidationResultEvent
- Validator
- Validators
- VBox
- VDividedBox
- Vector
- VerticalLayout
- VerticalLayout (Spark)
- VGroup (Spark)
- Video
- VideoDisplay
- VideoElement
- VideoElement (Spark)
- VideoEvent
- VideoPlayer (Spark)
- VideoPlayerScrubBar
- ViewStack
- VScrollBar (Spark)
- VSlider
- VSlider (Spark)
- XML
- XMLList
- XMLListCollection
- ZipCodeValidator
- ZipCodeValidatorDomainType
- Zoom
-
Articles
- December 2010
- November 2010
- October 2010
- September 2010
- August 2010
- July 2010
- June 2010
- May 2010
- April 2010
- March 2010
- February 2010
- January 2010
- December 2009
- November 2009
- October 2009
- September 2009
- August 2009
- July 2009
- June 2009
- May 2009
- April 2009
- March 2009
- February 2009
- January 2009
- December 2008
- November 2008
- October 2008
- September 2008
- August 2008
- July 2008
- June 2008
- May 2008
- April 2008
- March 2008
- February 2008
- January 2008
- December 2007
- November 2007
- October 2007
- September 2007
- August 2007
- July 2007
-
Meta


Thanks for the tip. I could not find any documentation on the “sourceChanged” Event in the Flex help and there doesn’t seem to be any popup hints for this event when coding the component in Flex. Any ideas?
Brendan,
There are several “undocumented” events in the Flex API. These events weren’t really meant for public use, but they can be useful in certain circumstances.
Peter
Do you know if there is a way to force the image to redraw? I’m very new to flex, but it looks as though the image is redrawn any time source is set, except in the case where I need it to.
Any help is appreciated. Thanks in advance.
Barry
Barry,
I’m not sure, but does calling
img.validateNow();help?Peter
Thanks for this, I’ve spent a lot of time trying to look how to do this without having to override the load method and the source property. I’m a bit miffed they decided not to publish this particular event! Is there a source of information you would recommend that would reveal these “hidden” features?
Thanks for the tip – very helpful!!
Matt,
I just look through the source code. The Image class (\frameworks\projects\framework\src\mx\controls\Image.as) isn’t very exciting. It only has the
dataChangeevent metadata and there is only one instance of thedispatchEvent()method being called (from thedataproperty setter function). The next trick is to browse the superclass (in this case SWFLoader.as) and see what it has.Quickly searching for “dispatchEvent(“, we can see the following undocumented events (probably since you’d probably never need them in your applications):
– “autoLoadChanged” event (dispatched from
autoLoadsetter)– “loadForCompatibilityChanged” event (dispatched from
loadForCompatibilitysetter)– “loaderContextChanged” event (dispatched from
loaderContextsetter)– “maintainAspectRatioChanged” event (dispatched from
maintainAspectRatiosetter)– “scaleContentChanged” event (dispatched from
scaleContentsetter)– “sourceChanged” event (dispatched from
sourcesetter)– “trustContentChanged” event (dispatched from
trustContentsetter)Or, another approach is to search the source code for the following string:
Using TextPad, I searched the entire \frameworks\projects\framework\src\ folder for all .AS files and it found 245 occurrence(s) in 51 file(s).
Here’s the results for the SWFLoader class (odd, I’m not sure why “loadForCompatibilityChanged” event didn’t appear in this list):
The entire list is too long (and boring) to post here though.
Happy Flexing!
Peter
thanks,
how we get item numbers when we drag and drop item in a list based control.
Tahir Alvi
does not seem to work on flex 3.5 and flash player 9??