2011-06-10 3 views
-1

Мне нужно использовать меню в моем проекте ActionScript (FLARManager + Away3D), и я хочу использовать combobox. Я пытаюсь, но я терплю неудачу.ComboBox в ActionScript 3 (Flex)

Мой простой код

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; 
    } 
} 

Затем в моем проекте файл I Код:

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(); 
    } 
} 

Но это ничего не показывает. Кажется, я что-то упускаю, но не знаю, что.

Может ли кто-нибудь помочь мне, пожалуйста?

Редактировать с сообщением об ошибке:

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()[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() 
+1

Вполне возможно, вы добавляете ребенка * под * окна просмотра. Пожалуйста, покажите больше кода. –

+0

Если я код "addChild (cb);" или "stage.addChild (cb);" это то же самое. Я импортирую это: «import mx.collections.ArrayCollection;» и "import spark.components.ComboBox;". Когда я пытаюсь поместить только этот маленький код в основную функцию (без кода больше), это то же самое, он ничего не показывает. – ilazgo

+0

вопрос (название) слишком общий ... даже не пытается попытаться объяснить, в чем проблема! –

ответ

2

На основе кода, я предполагаю, что вы не проклейки в ComboBox путем установки высоты и ширины свойства или придав ему положение, установив х и у свойства.

Обе эти вещи чаще всего выполняются в методе updateDisplayList. В архитектуре Spark updateDisplayList() обычно реализуется в классе skin.

Подробнее:

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

+0

То же самое, когда я устанавливаю значения в cb.x, cb.y, cb.width и cb.height, он ничего не показывает. Если я понял ссылки, которые вы публикуете, мне не нужно вызывать (или реализовывать) updateDisplayList(), и если свойство пропущено (например, высота или ширина), я думаю, что для него требуются значения defalut. Я хочу поставить простой комбо-блок (или что-то подобное) в моем проекте, но я застрял здесь :( – ilazgo

+0

Вы должны показать больше кода, чтобы сделать ваш вопрос связным. Каков компонент, который вы расширяете? вам нужно вручную вызвать updateDisplayList(), но вы, вероятно, должны переопределить его и установить значения высоты/ширины/x/y вашего ComboBox там. Но это зависит от того, какой компонент вы расширяете. – JeffryHouser

+0

Спасибо за ваш ответ , Я просто редактирую свой вопрос с помощью всего кода (это пример кода, но я не могу его запустить!). Это мой первый проект в ActionScript, поэтому, возможно, мне не хватает чего-то важного. – ilazgo

Смежные вопросы