Събитията не се задействат в персонализиран Flex компонент

Правя първия си удар в писането на персонализиран компонент flex 4 чрез разширяване на класа UIComponent. За съжаление не мога да накарам компонента да реагира на каквито и да било събития с мишката. Опитах да настроя mouseEnabled на true е компонентът, както и да настроя mouseChildren на true в родителя (обекта етап).

Изглежда, каквото и да правя, събитията ми с кликване могат да бъдат открити от сцената, но не и с компонента.

Ето моят клас компонент:

package components {

    import mx.core.UIComponent;

    public class DrawCanvas extends UIComponent {

        public function DrawCanvas() {
            super();
        }
    }
}

И ето моят файл WindowedApplication:

<?xml version="1.0" encoding="utf-8"?>
<s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009" 
                       xmlns:s="library://ns.adobe.com/flex/spark" 
                       xmlns:mx="library://ns.adobe.com/flex/mx"
                       xmlns:cmp="components.*"
                       minWidth="800" minHeight="600"
                       applicationComplete="init()">

    <fx:Script>
        <![CDATA[
            private function init():void {
                myBox.addEventListener(MouseEvent.CLICK, reportClick);
                stage.addEventListener(MouseEvent.CLICK, stageClick);
            }

            private function stageClick(event:MouseEvent):void {
                trace(event.target, event.currentTarget);
                trace("Stage Click", event.localX, event.localY);
            }

            private function reportClick(event:MouseEvent):void {
                trace(event.target, event.currentTarget);
                trace("Click", event.localX, event.localY);
            }
        ]]>
    </fx:Script>

        <cmp:DrawCanvas id="myBox"
                    height="100%" width="100%"/>

</s:WindowedApplication>

Благодаря предварително,

Сам


person Sam    schedule 24.06.2011    source източник


Отговори (1)


Компонентът може да изпраща събития на мишката само чрез видими части. Доколкото вашият компонент няма съдържание, той не може да задейства събития на мишката. Опитайте нещо като:

package components {

    import mx.core.UIComponent;

    public class DrawCanvas extends UIComponent {

        public function DrawCanvas() {
            super();
        }

        override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void
        {
            super.updateDisplayList(unscaledWidth, unscaledHeight);
            graphics.clear();
            graphics.beginFill(0xFFFFFF, 0);
            graphics.drawRect(0, 0, unscaledWidth, unscaledHeight);
            graphics.endFill();
        }
    }
}
person Constantiner    schedule 24.06.2011