Захват ключевых событий в mx: изображение - PullRequest
0 голосов
/ 06 мая 2010

Я пытаюсь запечатлеть ключевые события в mx: Image и не могу заставить его работать.

<?xml version="1.0" encoding="utf-8" ?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" />
  <mx:Canvas width="100%" height="100%">
    <mx:Label id="lab" x="50" y="20" text="Nothing"/>
    <mx:Image x="50" y="50" source="@Embed('image.png')" keyDown="lab.text='Something';"/>
  </mx:Canvas>
</mx:Application>

Когда я нажимаю клавишу, когда мышь находится над изображением, я ожидаю, что текст метки изменится на «Нечто», но ничего не происходит. Я сделал все виды сочетаний включенных и поместил keyDown на холст и метку.

Чего мне не хватает?

Ответы [ 2 ]

1 голос
/ 09 мая 2010

Проблема в фокусе. События нажатия клавиш генерируются только внутри компонента, когда этот компонент (или один из его потомков) имеет фокус. Чтобы изображение получало фокус, необходимо установить focusEnabled в значение true. Это, однако, требует, чтобы пользовательская вкладка давала фокусировку на изображение, так как нажатие на изображение не передает фокус, а тем более наводит на него курсор.

Если вы хотите прослушивать событие нажатия клавиши, когда пользовательская мышь находится над изображением, вы можете вручную назначить фокус на изображение, когда пользователь наводит на него указатель мыши.

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
    <mx:Script>
        <![CDATA[
            import mx.core.UIComponent;
            import mx.managers.IFocusManagerComponent;

            private var oldFocus:IFocusManagerComponent;

            public function imageMouseOver(event:MouseEvent):void {
                oldFocus = focusManager.getFocus();
                var newFocus:UIComponent = event.target as UIComponent;
                newFocus.setFocus();
            }

            private function imageMouseOut(event:MouseEvent):void {
                if (oldFocus) {
                    oldFocus.setFocus();
                }
            }
        ]]>
    </mx:Script>
<mx:Canvas width="100%" height="100%">
    <mx:Label id="lab" x="50" y="20" text="Nothing"/>
    <mx:Image x="50" y="50" source="@Embed('image.png')" mouseOver="imageMouseOver(event)" mouseOut="imageMouseOut(event)" keyDown="lab.text='Something';" focusEnabled="true"/>
</mx:Canvas>
</mx:Application>

В качестве альтернативы, вы можете назначить слушателя с нажатой клавишей на сцену, когда пользователь наводит курсор мыши на изображение, и удалять его, когда пользователь выключает мышь.

0 голосов
/ 06 мая 2010

Изображение получено из (a.k.a "is") SWFLoader. Вы должны добавить слушателей к содержимому загрузчика, а не сам загрузчик. Подробности см. В этом вопросе: Взаимодействие с загрузчиком SWF

...