Excellent, thanks very much for the responses. As an aside, I did solve the problem by using the bitmap classes instead as they seemed to have more consistent behavior. (And I couldn't find a straightforward way to copy the image data with the Image class)
Michael and Joseph, that makes perfect sense and is reproducible; setting an explicit width and height causes the image to show as expected. Thanks very much for the enlightenment. -- Aaron Hachez --- In flexcoders@yahoogroups.com, "Michael Labriola" <[EMAIL PROTECTED]> wrote: > > > Close, but no. > > In Flex, parents are responsible for sizing their children. Flex > Containers (which are just UIComponents with more code) do size > their children, but you can also create UIComponents that know how > to size their children. > > Neither a container, nor a component that implements a container > interface needs to be involved in any way to handle this. That is > the fallacy I am addressing. > > Look at the example I provided and you will not see a Container or > implementor of that interface. > > In other words: > * UIComponents can contain other UIComponents. > * Containers are UIComponents which know how to automatically size > their children through the component lifecycle > > Does this make sense? > Mike > > > > --- In flexcoders@yahoogroups.com, Joseph Balderson <news@> wrote: > > > > In other words, UIComponents /can/ natively contain other > UIComponents, > > only the child UIComponent will by default have a 0 width and > height. > > > > Which it means it won't show up on the stage. Which means, by > default, > > you cannot get a native (non-extended) UIComponent to show up when > you > > add it to another UIComponent. Which means you cannot > (successfully) add > > a native UIComponent to another UIComponent. > > > > Thanks for catching the technicality, as a writer I love that kind > of > > precision. > > > > But basically what Charlie was saying is correct: "UIComponent's > can't > > contain other UIComponents without being a subclass of Container > or > > implementing the IContainer interface." -- only he forgot to > add 'and > > have them successfully show up on stage'. > > > > So you're both correct IMO. Thanks for the clarity. > > > > > _____________________________________________________________________ > __ > > > > Joseph Balderson | http://joeflash.ca > > Flex & Flash Platform Developer | Abobe Certified Developer & > Trainer > > Author, Professional Flex 3 (coming Winter 2008) > > Staff Writer, Community MX | http://communitymx.com/author.cfm? > cid=4674 > > > > > > > > Michael Labriola wrote: > > > Guys, sorry, but that's not quite right. UIComponents can > contain > > > other UIComponents without being a container. It is a common use > > > case. Take a look at the simple example Adobe includes with > their > > > docs: > > > > > > > http://livedocs.adobe.com/flex/2/docs/wwhelp/wwhimpl/js/html/wwhelp.h > > > tm?href=00001742.html > > > > > > You will notice that the mocal text component is a UIComponent > but > > > it contains a button and a text area... both UIComponents. > > > > > > The difference is that containers like Canvas have the logic to > size > > > and position any child they contain by default. UIComponent does > > > not. So, in a UIComponent descendant, you need to write code to > size > > > and position every child or they will exist as 0 width and 0 > height > > > component. > > > > > > HTH, > > > Labriola > > > > > > > > > --- In flexcoders@yahoogroups.com, "Charlie Hubbard" > > > <charlie.hubbard@> wrote: > > >> Right. Image is a UIComponent, and TextArea is a UIComponent. > > >> UIComponent's can't contain other UIComponents without being a > > >> subclass of Container or implementing the IContainer > interface. > > > Not a > > >> simple task. > > >> > > >> addChild() is defined in DisplayObject which apart of the Flash > API > > >> not the Flex API. BitmapAsset is a sublcass of DisplayObject > and > > > not > > >> UIComponent. So you can add it to the text area directly using > > > this > > >> code: > > >> > > >> var img : BitmapAsset = new imgCls() as BitmapAsset; > > >> img.x = txtArea.mouseX; > > >> img.y = txtArea.mouseY; > > >> txtArea.addChild( img ); > > >> > > >> Now, try that out, and you'll start to see some issues that > you'll > > >> have to asess if this is going to work for what you're trying > to > > > do. > > >> Since the bitmap is not apart of the document in the TextArea > you > > > are > > >> going to get clipping or scrolling. If you want to do that > you'll > > >> have to get really dirty with the TextArea API. Probably even > > >> ditching TextArea altogether and writing your own, or modifying > > > rich > > >> text editor. > > >> > > >> Charlie > > >> > > >> > > >> On Thu, May 29, 2008 at 5:37 PM, aarhac <aaronh@> wrote: > > >>> Hello, > > >>> > > >>> I have figured out how to work around my problem, but I do > > > wonder why > > >>> one of the following methods works, and the other doesn't. I > > > would be > > >>> grateful if someone could explain the error in the failing > > > method. > > >>> The code is pasted below (Below the line of dashes) in it's > > > entirety, > > >>> and is commented as to which works and which doesn't. > > >>> > > >>> The image referenced in this case is a 32x32 pixel png file on > my > > >>> local system. I am attempting to display the image "on" a text > > > area. > > >>> Using the default example from the flex documentation to embed > an > > >>> image, I cannot get the image to show up when added to the > text > > > area's > > >>> display list, but it does show just fine when added to the root > > >>> display list. I also added the image to the textArea using > > >>> addChildAt(txtIcon, txtArea.numChildren) with no change in > > > effect. > > >>> The second method works just fine. I imagine that the problem > has > > >>> something to do with applying the image as a byte array to > > >>> image.source, but I wonder why exactly? Is this a bug? > > >>> > > >>> Thanks in advance, > > >>> > > >>> --Aaron > > >>> > > >>> ------------------------------------ > > >>> > > >>> <?xml version="1.0" encoding="utf-8"?> > > >>> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" > > >>> layout="absolute"> > > >>> > > >>> <!--Works--> > > >>> <mx:Image id="txtIcon" source="@Embed(source='c:/icon.png')"/> > > >>> > > >>> <mx:TextArea id="txtArea" width="400" height="200" > > > click="addImage()"/> > > >>> <mx:Script> > > >>> <![CDATA[ > > >>> import mx.controls.Image; > > >>> import mx.core.BitmapAsset; > > >>> > > >>> // Doesn't work > > >>> [Embed(source="c:/icon.png")] > > >>> [Bindable] > > >>> public var imgCls:Class; > > >>> > > >>> public function addImage():void > > >>> { > > >>> // Doesn't work > > >>> var loadedImg:Image = new Image(); > > >>> loadedImg.source = new imgCls() as BitmapAsset; > > >>> > > >>> loadedImg.x = 10; > > >>> loadedImg.y = 10; > > >>> txtArea.addChild(loadedImg); > > >>> > > >>> // Note: While the above doesn't work, adding the > > >>> // image to the root display list does work: > > >>> //addChild(loadedImg); > > >>> > > >>> // Works > > >>> txtIcon.x = 50; > > >>> txtIcon.y = 10; > > >>> txtArea.addChild(txtIcon); > > >>> } > > >>> ]]> > > >>> </mx:Script> > > >>> > > >>> </mx:Application> > > >>> > > >>> > > > > > > > > > > > > ------------------------------------ > > > > > > -- > > > Flexcoders Mailing List > > > FAQ: > http://groups.yahoo.com/group/flexcoders/files/flexcodersFAQ.txt > > > Search Archives: http://www.mail-archive.com/flexcoders% > 40yahoogroups.comYahoo! Groups Links > > > > > > > > > > > > > > >