我正在尝试捕获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放在画布和标签上。
我错过了什么?
答案 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