捕获mx:Image中的关键事件

时间:2010-05-06 15:51:59

标签: flex image keyboard

我正在尝试捕获mx中的关键事件:图像,我无法使其工作。

<?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>

当我在鼠标悬停在图像上时按下某个键,我希望标签文本变为“Something”,但没有任何反应。我已经完成了各种组合的启用和将keyDown放在画布和标签上。

我错过了什么?

2 个答案:

答案 0 :(得分:1)

这个问题是重点之一。仅当组件(或其后代之一)具有焦点时,才会在组件内生成按键事件。要使Image获得焦点,必须将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>

或者,当用户将鼠标悬停在图像上时,您可以将关键监听器分配给阶段,并在用户将鼠标移出时将其删除。

答案 1 :(得分:0)

图像源自(a.k.a“是一个”)SWFLoader。您需要向加载器的内容添加侦听器,而不是加载器本身。有关详细信息,请参阅此问题Interact with SWF Loader