2010-05-06 90 views
0

我试图捕获mx中的关键事件:图片,我无法使其工作。在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> 

当我按下一个键时,鼠标悬停我希望标签文字更改为“东西”的形象,但没有任何反应。我已经完成了各种启用和将keyDown放在画布和标签上的组合。

我错过了什么?

回答

1

这个问题是重点之一。关键事件只在组件(或其后代之一)具有焦点时才在组件内部生成。为了使图像获得焦点,您必须将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

图片派生自(a.k.a“是”)SWFLoader。您需要将侦听器添加到加载器的内容中,而不是加载器本身。看到这个问题的细节,Interact with SWF Loader

+0

我尝试使用img.content通过在创建完成方法中添加具有相同结果的侦听器。我也改变了它,所以只有这样一个标签: 仍然不工作,并且mx:标签应该像任何其他UIComponent一样行事吗? – Doug 2010-05-06 17:09:44