2010-05-06 73 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