События не запускаются в пользовательском компоненте 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