ComboBox in ActionScript 3 (Flex)
I have to use a menu in my actionscript project (FLARManager + Away3D) and I want to use a combobox. I try but I fail.
My simple code is
import spark.components.ComboBox;
import mx.collections.ArrayCollection;
public class MyComboBox extends ComboBox
{
public function MyComboBox()
{
super();
var dp_ac:ArrayCollection = new ArrayCollection([
{label: "test 1"},
{label: "test 2"},
{label: "test 2"}
]);
this.dataProvider = dp_ac;
this.labelField = "label";
this.x=200;
this.y=-200;
this.width=20;
this.height=10;
}
}
Then, in my project file I code:
import aplicacion.MyComboBox;
import artedra.*;
import com.transmote.flar.FLARManager;
import com.transmote.flar.marker.FLARMarker;
import com.transmote.flar.marker.FLARMarkerEvent;
import com.transmote.flar.tracker.FLARToolkitManager;
import flash.display.Sprite;
import flash.events.Event;
import flash.events.KeyboardEvent;
import spark.components.ComboBox;
import spark.components.Group;
[SWF(width="800", height="600", frameRate="30", backgroundColor="#C0C0C0")]
/**
*
* @author Iago Laz
*
*/
public class ARapp extends Sprite {
private var flarManager:FLARManager;
private var activeMarker:FLARMarker;
private var artedraManager:IARTeDraManager = new ARTeDraManager(stage);
private var targetDetected:Boolean = new Boolean(false);
private var next:Number = ARTeDraManager.GRID;
public function ARapp () {
addEventListener(Event.ADDED_TO_STAGE,onAdded);
}
private function onAdded (evt:Event) :void {
removeEventListener(Event.ADDED_TO_STAGE,onAdded);
flarManager = new FLARManager("../resources/flarConfig.xml",new FLARToolkitManager(),stage);
flarManager.addEventListener(FLARMarkerEvent.MARKER_ADDED,onMarkerAdded);
flarManager.addEventListener(FLARMarkerEvent.MARKER_UPDATED,onMarkerUpdated);
flarManager.addEventListener(FLARMarkerEvent.MARKER_REMOVED,onMarkerRemoved);
flarManager.addEventListener(Event.INIT,onFlarManagerInited);
}
private function onFlarManagerInited (evt:Event) :void {
flarManager.removeEventListener(Event.INIT,onFlarManagerInited);
artedraManager.showModel();
artedraManager.showViews();
artedraManager.showGridDots(ARTeDraManager.GRID);
var g:Group = new Group();
var cb:MyComboBox = new MyComboBox();
g.addElement(cb);
stage.addEventListener(KeyboardEvent.KEY_DOWN,reportKeyDown);
stage.addEventListener(Event.ENTER_FRAME,onEnterFrame);
}
private function reportKeyDown(event:KeyboardEvent):void {
if(event.keyCode==32) {
if(next==ARTeDraManager.DOTS)
next=ARTeDraManager.EMPTY;
else
next++;
artedraManager.showGridDots(next);
}
}
private function onMarkerAdded (evt:FLARMarkerEvent) :void {
trace("["+evt.marker.patternId+"] added");
activeMarker = evt.marker;
targetDetected = true;
}
private function onMarkerUpdated (evt:FLARMarkerEvent) :void {
activeMarker = evt.marker;
targetDetected = true;
}
private function onMarkerRemoved(evt:FLARMarkerEvent):void
{
trace("["+evt.marker.patternId+"] removed");
activeMarker = null;
targetDetected = false;
}
private function onEnterFrame(evt:Event):void {
if(activeMarker) {
artedraManager.rotateShapes(activeMarker.rotationZ);
}
artedraManager.showSphereMarkerDetected(targetDetected);
artedraManager.renderScenes();
}
}
But it doesn't show anything. I think I'm missing something but I don't know what.
Can anyone help me, please?
Edit with error message:
TypeError: Error #1009: No se puede acceder a una propiedad o a un m賯do de una referencia a un objeto nulo.
at mx.styles::StyleManager$/getStyleManager()[E:\dev\4.x\frameworks\projects\framework\src\mx\styles\StyleManager.as:125]
at mx.styles::StyleProtoChain$/getStyleManager()[E:\dev\4.x\frameworks\projects\framework\src\mx\styles\StyleProtoChain.as:970]
at mx.styles::StyleProtoChain$/initProtoChain()[E:\dev\4.x\frameworks\projects\framework\src\mx\styles\StyleProtoChain.as:149]
at mx.core::UIComponent/http://www.adobe.com/2006/flex/mx/internal::initProtoChain()[E:\dev\4.x\frameworks\projects\framework\src\mx\core\UIComponent.as:10446]
at mx.core::UIComponent/regenerateStyleCache()[E:\dev\4.x\frameworks\projects\framework\src\mx\core\UIComponent.as:10509]
at mx.core::UIComponent/http://www.adobe.com/2006/flex/mx/internal::addingChild()[E:\dev\4.x\frameworks\projects\framework\src\mx\core\UIComponent.as:7213]
at mx.core::UIComponent/addChildAt()[E:\dev\4.x\frameworks\projects\framework\src\mx\core\UIComponent.as:6943]
at spark.components::Group/addDisplayObjectToDisplayList()[E:\dev\4.x\frameworks\projects\spark\src\spark\components\Group.as:1825]
at spark.components::Group/http://www.adobe.com/2006/flex/mx/internal::elementAdded()[E:\dev\4.x\frameworks\projects\spark\src\spark\components\Group.as:1416]
at spark.components::Group/addElementAt()[E:\dev\4.x\frameworks\projects\spark\src\spark\components\Group.as:1183]
at spark.components::Group/addElement()[E:\dev\4.x\frameworks\projects\spark\src\spark\components\Group.as:1141]
at aplicacion::ARapp/onFlarManagerInited()[C:\Users\Iago\workspace\PFG_ARTeDra\src\aplicacion\ARapp.as:75]
at flash.events::EventDispatcher/dispatchEventFunction()
at flash.events::EventDispatcher/dispatchEvent()
at com.transmote.flar::FLARManager/onTrackerComplete()[C:\Users\Iago\workspace\PFG_ARTeDra\src\com\transmote\flar\FLARManager.as:1098]
at flash.events::EventDispatcher/dispatchEventFunction()
at flash.events::EventDispatcher/dispatchEvent()
at com.transmote.flar.tracker::FLARToolkitManager/onTrackerComplete()[C:\Users\Iago\workspace\PFG_ARTeDra\src\com\transmote\flar\tracker\FLARToolkitManager.as:384]
at com.transmote.flar.tracker::FLARToolkitManager/initTracker()[C:\Users\Iago\workspace\PFG_ARTeDra\src\com\transmote\flar\tracker\FLARToolkitManager.as:332]
at com.transmote.flar::FLARManager/onTrackerInited()[C:\Users\Iago\workspace\PFG_ARTeDra\src\com\transmote\flar\FLARManager.as:1080]
at flash.events::EventDispatcher/dispatchEventFunction()
at flash.events::EventDispatcher/dispatchEvent()
at com.transmote.flar.tracker::FLARToolkitManager/checkForInitComplete()[C:\Users\Iago\workspace\PFG_ARTeDra\src\com\transmote\flar\tracker\FLARToolkitManager.as:374]
at com.transmote.flar.tracker::FLARToolkitManager/onPatternsLoaded()[C:\Users\Iago\workspace\PFG_ARTeDra\src\com\transmote\flar\tracker\FLARToolkitManager.as:364]
at flash.events::EventDispatcher/dispatchEventFunction()
at flash.events::EventDispatcher/dispatchEvent()
at com.transmote.flar.pattern::FLARPatternLoader/checkForLoadCompletion()[C:\Users\Iago\workspace\PFG_ARTeDra\src\com\transmote\flar\pattern\FLARPatternLoader.as:205]
at com.transmote.flar.pattern::FLARPatternLoader/onPatternLoaded()开发者_JAVA技巧[C:\Users\Iago\workspace\PFG_ARTeDra\src\com\transmote\flar\pattern\FLARPatternLoader.as:197]
at flash.events::EventDispatcher/dispatchEventFunction()
at flash.events::EventDispatcher/dispatchEvent()
at flash.net::URLLoader/onComplete()
Based on the code, I'm guessing you aren't sizing the ComboBox by setting the height and width properties or giving it a position by setting the x and y properties.
Both of these things are most commonly done in the updateDisplayList method. In the Spark architecture updateDisplayList() is usually implemented in the skin class.
More info:
http://livedocs.adobe.com/flex/3/html/help.html?content=ascomponents_advanced_2.html
http://help.adobe.com/en_US/flex/using/WS460ee381960520ad-2811830c121e9107ecb-7fff.html
精彩评论