Thanks that worked like a charm. I had a feeling I wanted to do a dispatched 
event, I just forgot that I then get it in the panel MXML attributes! You're 
the best!

----------------------------------------
From: "Tim Hoff" <timh...@aol.com>
Sent: Wednesday, June 24, 2009 9:54 AM
To: flexcoders@yahoogroups.com
Subject: [flexcoders] Re: Extending Custom Panel with RadioButtons - Help 

Ok, so take maps out of the RadioButtonPanel AS component and make the 
startLocation  RadioButtonGroup public.  Next create a Event in the component, 
that will be dispatched when the radio buttons are clicked:

After the import statements add:
[ Event    (name= "changeMap"    ,type= "flash.events.Event"    )] 

Then in changeStartType(), replace the if statement with:
var     event:Event =  new     Event(  "changeMap"     );
dispatchEvent( event );   

   Now you can listen for the event:
<wallyk:RadioButtonPanel   changeMap=" handleChangeMap( event )  " />  

The event handler would then perform the changes, from outside of the component:

private     function     handleChangeMap( event:Event ): void    
{
      if     (event.currentTarget.startLocation.selectedValue ==  "address"    
){
           start_txt.text =  "Enter Starting Address"    ;
      } else    {
           start_txt.text =  "Choose Your Airport"    ;
      }
}    

It makes sense to do it this way because the content of the panel could change 
and you might want to re-use your component..

-TH

--- In flexcoders@yahoogroups.com, "Wally Kolcz" <wko...@...> wrote:
>
> How can I do that? maps is the 'page' that this panel is on. I need to 
> control the elements that are inside the panel: 
> 
> <wallyk:RadioButtonPanel width="100%" height="20%" title="Start Address 
> Type:" paddingLeft="5" includeInLayout="true" visible="true" > 
> <mx:Label id="start_txt" /> 
> <mx:Form id="frmAddress" width="100%" height="100%"> 
> <mx:FormItem label="Street Address:" fontWeight="bold" > 
> <mx:TextInput id="address_txt" fontWeight="normal" /> 
> </mx:FormItem> 
> <mx:FormItem label="City:" fontWeight="bold"> 
> <mx:TextInput id="city_txt" fontWeight="normal" /> 
> </mx:FormItem> 
> <mx:FormItem label="State:" fontWeight="bold"> 
> <mx:TextInput id="state_txt" fontWeight="normal" maxChars="2" /> 
> </mx:FormItem> 
> <mx:FormItem label="Zip Code:" fontWeight="bold"> 
> <mx:TextInput id="zip_txt" fontWeight="normal" maxChars="5"/> 
> </mx:FormItem> 
> <mx:Button label="Get Directions" click="showDirections(address_txt.text, 
> city_txt.text, state_txt.text, zip_txt.text);" /> 
> </mx:Form> 
> <mx:Form width="100%" id="frmAirport" height="100%" includeInLayout="false" 
> visible="false"> 
> <mx:ComboBox id="addresscbb" labelField="label" fontWeight="normal"> 
> <mx:ArrayCollection> 
> <mx:Object label="Capital Region International Airport" address="4100 Capital 
> City Boulevard" city="Lansing" state="MI" zipcode="48906"/> 
> <mx:Object label="Kalamazoo/Battle Creek International Airport" address="5235 
> Portage Road" city="Kalamazoo" state="MI" zipcode="49002"/> 
> <mx:Object label="Gerald R. Ford International Airport" address="5500 44th St 
> SE" city="Grand Rapids" state="MI" zipcode="49512"/> 
> <mx:Object label="Bishop International Airport" address="3425 W Bristol Road" 
> city="Flint" state="MI" zipcode="48507"/> 
> <mx:Object label="Detroit Metropolitan Wayne County Airport" address="9000 
> Middlebelt Road" city="Romulus" state="MI" zipcode="48174"/> 
> <mx:Object label="Capital Region International Airport" address="655 Aviation 
> Drive" city="Mason" state="MI" zipcode="48854"/> 
> </mx:ArrayCollection> 
> </mx:ComboBox> 
> </mx:Form> 
> <mx:Button label="Map Route" id="submit_btn" visible="false" /> 
> </wallyk:RadioButtonPanel> 
> 
> ---------------------------------------- 
> From: "Tim Hoff" timh...@... 
> Sent: Wednesday, June 24, 2009 8:56 AM 
> To: flexcoders@yahoogroups.com 
> Subject: [flexcoders] Re: Extending Custom Panel with RadioButtons - Help 
> 
> You need to add maps as a child in createChildren(). 
> 
> -TH 
> 
> --- In flexcoders@yahoogroups.com, "Wally Kolcz" wkolcz@ wrote: 
> 
> > 
> 
> > 
> 
> > Thanks! The labels are now showing perfectly! 
> 
> > 
> 
> > However, I am getting an error when I attempt to check the radio 
> 
> buttons: 
> 
> > TypeError: Error #1009: Cannot access a property or method of a null 
> 
> object reference. 
> 
> > at 
> 
> com.wallykolcz.views.components::RadioButtonPanel/changeStartType()[D:\w\ 
> 
> kolcz\My 
> 
> Documents\Flex3\landingPage\src\com\wallykolcz\views\components\RadioBut\ 
> 
> tonPanel.as:34] 
> 
> > 
> 
> > Line 34 (in this case since I chose Airport to make this error) is 
> 
> part of this: 
> 
> > 
> 
> > public function changeStartType(e:Event):void { 
> 
> > if (startLocation.selectedValue == "address"){ 
> 
> > maps.start_txt.text = "Enter Starting Address"; 
> 
> > maps.frmAirport.includeInLayout = false; 
> 
> > maps.frmAirport.visible = false; 
> 
> > maps.frmAddress.includeInLayout = true; 
> 
> > maps.frmAddress.visible = true; 
> 
> > maps.submit_btn.visible = true; 
> 
> > }else{ 
> 
> > maps.start_txt.text = "Choose Your Airport"; 
> 
> > maps.frmAddress.includeInLayout = false; 
> 
> > maps.frmAddress.visible = false; 
> 
> > maps.frmAirport.includeInLayout = true; 
> 
> > maps.frmAirport.visible = true; 
> 
> > maps.submit_btn.visible = true; 
> 
> > } 
> 
> > 
> 
> > } 
> 
> > 
> 
> > I did import and create a variable for the 'maps' component in which 
> 
> this panel is inside. 
> 
> > 
> 
> > import edu.umich.body.Maps; 
> 
> > private var maps:Maps; 
> 
> > 
> 
> > Is there something I am missing? 
> 
> > 
> 
> > If you need a visual reference you can see the concept site at 
> http://www.med.umich.edu/prmc/landing/helipad 
> 
> > 
> 
> > ---------------------------------------- 
> 
> > 
> 
> > From: "Tim Hoff" TimHoff@ 
> 
> > Sent: Wednesday, June 24, 2009 8:04 AM 
> 
> > To: flexcoders@yahoogroups.com 
> 
> > Subject: [flexcoders] Re: Extending Custom Panel with RadioButtons - 
> 
> Help 
> 
> > 
> 
> > Hi Wally, 
> 
> > 
> 
> > Pretty close, just a few minor tweaks needed: 
> 
> > 
> 
> > // add the event parameter 
> 
> > 
> 
> > public 
> 
> > 
> 
> > function 
> 
> > 
> 
> > changeStartType( event:Event ): 
> 
> > 
> 
> > void 
> 
> > 
> 
> > // change to group 
> 
> > 
> 
> > addressRB.group = startLocation ; 
> 
> > airportRB.group = startLocation ; 
> 
> > 
> 
> > protected 
> 
> > 
> 
> > override 
> 
> > 
> 
> > function 
> 
> > 
> 
> > updateDisplayList(unscaledWidth:Number, unscaledHeight:Number): 
> 
> > 
> 
> > void 
> 
> > 
> 
> > { 
> 
> > 
> 
> > super 
> 
> > 
> 
> > .updateDisplayList(unscaledWidth, unscaledHeight); 
> 
> > 
> 
> > // gap between label and edges of button 
> 
> > 
> 
> > var 
> 
> > 
> 
> > margin:int = 4; 
> 
> > 
> 
> > // set the sizes 
> 
> > addressRB.setActualSize(addressRB.getExplicitOrMeasuredWidth(), 
> 
> addressRB.getExplicitOrMeasuredHeight()); 
> 
> > airportRB.setActualSize(airportRB.getExplicitOrMeasuredWidth(), 
> 
> airportRB.getExplicitOrMeasuredHeight()); 
> 
> > 
> 
> > // position the buttons in the panel 
> 
> > 
> 
> > addressRB.move(145,5 ); 
> 
> > airportRB.move(255,5 ); 
> 
> > } 
> 
> > 
> 
> > -TH 
> 
> > 
> 
> > --- In flexcoders@yahoogroups.com, "Wally Kolcz" wkolcz@ wrote: 
> 
> > > 
> 
> > > 
> 
> > > 
> 
> > > Using an example from the web I am trying to create a custom Panel 
> 
> component that had radio buttons in the panel header for a specific 
> 
> piece of a web site. The panel works and I am getting 2 radio buttons 
> 
> but no labels for either button and the radioGroup's 
> 
> > > changeStartType() is not being called 
> 
> > > . What am I doing wrong? Here is the AS: 
> 
> > > 
> 
> > > package com.wallykolcz.views.components 
> 
> > > { 
> 
> > > 
> 
> > > import edu.umich.body.Maps; 
> 
> > > import flash.events.Event; 
> 
> > > import mx.containers.Panel; 
> 
> > > import mx.controls.Button; 
> 
> > > import mx.controls.RadioButton; 
> 
> > > import mx.controls.RadioButtonGroup; 
> 
> > > 
> 
> > > public class RadioButtonPanel extends Panel 
> 
> > > { 
> 
> > > 
> 
> > > //Create Radio Button Group and Buttons 
> 
> > > private var startLocation:RadioButtonGroup = new RadioButtonGroup(); 
> 
> > > private var addressRB:RadioButton = new RadioButton(); 
> 
> > > private var airportRB:RadioButton = new RadioButton(); 
> 
> > > private var maps:Maps; 
> 
> > > 
> 
> > > //constructor 
> 
> > > public function RadioButtonPanel() 
> 
> > > { 
> 
> > > super(); 
> 
> > > } 
> 
> > > 
> 
> > > public function changeStartType():void { 
> 
> > > if (startLocation.selectedValue == "address"){ 
> 
> > > maps.start_txt.text = "Enter Starting Address"; 
> 
> > > maps.frmAirport.includeInLayout = false; 
> 
> > > maps.frmAirport.visible = false; 
> 
> > > maps.frmAddress.includeInLayout = true; 
> 
> > > maps.frmAddress.visible = true; 
> 
> > > maps.submit_btn.visible = true; 
> 
> > > }else{ 
> 
> > > maps.start_txt.text = "Choose Your Airport"; 
> 
> > > maps.frmAddress.includeInLayout = false; 
> 
> > > maps.frmAddress.visible = false; 
> 
> > > maps.frmAirport.includeInLayout = true; 
> 
> > > maps.frmAirport.visible = true; 
> 
> > > maps.submit_btn.visible = true; 
> 
> > > } 
> 
> > > } 
> 
> > > 
> 
> > > protected override function createChildren():void{ 
> 
> > > super.createChildren(); 
> 
> > > //instantiate new radiobuttons and assign properties 
> 
> > > addressRB.value="address"; 
> 
> > > addressRB.label="My Address"; 
> 
> > > addressRB.groupName = "startLocation"; 
> 
> > > 
> 
> > > airportRB.value="airport"; 
> 
> > > airportRB.label="Airport"; 
> 
> > > airportRB.groupName="startLocation" 
> 
> > > 
> 
> > > //add event listener for change event and call method 
> 
> > > startLocation.addEventListener(Event.CHANGE, changeStartType); 
> 
> > > 
> 
> > > //add the buttons to rawChildren 
> 
> > > rawChildren.addChild(addressRB); 
> 
> > > rawChildren.addChild(airportRB); 
> 
> > > } 
> 
> > > 
> 
> > > protected override function updateDisplayList(unscaledWidth:Number, 
> 
> unscaledHeight:Number):void{ 
> 
> > > super.updateDisplayList(unscaledWidth, unscaledHeight); 
> 
> > > //gap between label and edges of button 
> 
> > > var margin:int = 4; 
> 
> > > 
> 
> > > //position the buttons in the panel 
> 
> > > addressRB.move(145, 15); 
> 
> > > airportRB.move(255,15) 
> 
> > > } 
> 
> > > 
> 
> >
>



Reply via email to