2010-01-04 61 views
0

我寫了一個用於在Flex中繪製圓的自定義組件。但是當我嘗試爲該組件編寫單擊事件或mouseDown事件時,它不起作用。如何在Flex中爲自定義組件編寫事件?

我有一個VBox內的圓形組件。

<mx:VBox label="Currents Quote" width="100%" backgroundColor="#DDDDDD"> 

<comp:MyCircle id="circlle" x1="175" y1="150" 
        radius="140" click='{Alert.show("Hello");}' 
        mouseDown="handleMouseDown(event);"/> 
<comp:MyLine x1="175" y1="104"/> 
</mx:VBox> 

    private function handleMouseDown(event:MouseEvent):void { 

     var pt:Point = new Point(event.localX, event.localY); 
     pt = event.target.localToGlobal(pt); 
     pt = circlle.globalToContent(pt); 
     var whichColor:String = "border area"; 

     if (pt.x < 150) { 
      if (pt.y < 150) 
       whichColor = "red"; 
      else 
       whichColor = "blue"; 
     } 
     else { 
      if (pt.y < 150) 
       whichColor = "green"; 
      else 
       whichColor = "magenta"; 
     } 

     Alert.show("You clicked on the " + whichColor); 
     } 

圈部件:

package components 
    { 
import mx.core.UIComponent; 

public class MyCircle extends UIComponent 
{ 
     public var x1:int; 
      public var y1:int; 
      public var radius:int; 

      override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void 
     { 
     graphics.lineStyle(1, 0x000000); 
     graphics.drawCircle(x1, y1, radius); 

     graphics.lineStyle(1, 0x000000); 
     graphics.drawCircle(x1, y1, radius-40); 

     graphics.lineStyle(1, 0x000000); 
     graphics.drawCircle(x1, y1, radius-100); 
     } 
    } 
} 

的「你好」警報僅在特定點顯示,並猜測是,在點(175150)與x,圓的y座標。但是不應該在我點擊MyCircle組件時顯示它?如何以這種方式啓用它?

此外,mouseDown函數不適用於MyCircle,但如果VBox具有該事件,則會顯示警報。爲什麼這樣?有人可以指導我嗎?

我應該以不同的方式爲自定義組件寫入事件嗎?

回答

1

我不確定這是否適用,但有一個錯誤,其中一些UIComponents無法正確識別click/mouseDown事件,除非它們具有背景顏色。看看爲您的圈子添加背景顏色是否有幫助。

+0

是的,它確實..我改變了背景顏色,現在事件被觸發。謝謝了很多:-) – Angeline 2010-01-05 05:22:56

+0

我發現了一些背景知識,似乎點擊無背景物品的邊框會產生一個點擊事件,甚至是其中的文字。拖放事件中拖動接受的相同作品。這可能是最初的設計師的意圖,缺乏視覺表示使控制透明,甚至事件。這甚至可能不是一個錯誤,我可以想出幾種積極使用這種控制的方法,但是當我們不知道它時,它可能會使我們陷入無盡的困境。 – invertedSpear 2010-01-05 15:30:42

0

您的代碼中也存在一些錯誤,例如,您的actionscript缺少腳本標記,您可能需要導入Alert。

<mx:VBox label="Currents Quote" width="100%" backgroundColor="#DDDDDD"> 

<comp:MyCircle id="circlle" x1="175" y1="150" 
        radius="140" click='{Alert.show("Hello");}' 
        mouseDown="handleMouseDown(event);"/> 
<comp:MyLine x1="175" y1="104"/> 
</mx:VBox> 

<mx:Script> 
<![CDATA[ 
    private function handleMouseDown(event:MouseEvent):void { 

     var pt:Point = new Point(event.localX, event.localY); 
     pt = event.target.localToGlobal(pt); 
     pt = circlle.globalToContent(pt); 
     var whichColor:String = "border area"; 

     if (pt.x < 150) { 
      if (pt.y < 150) 
       whichColor = "red"; 
      else 
       whichColor = "blue"; 
     } 
     else { 
      if (pt.y < 150) 
       whichColor = "green"; 
      else 
       whichColor = "magenta"; 
     } 

     Alert.show("You clicked on the " + whichColor); 
     } 
]]> 
</mx:Script> 
+0

我有這些標籤..我只是沒有寫在這裏的整個代碼..認爲只有功能是重要的,並遺漏了這些部分.. :-) – Angeline 2010-01-05 05:24:36

+0

哦哈哈...確保你注意,如果你這樣做,我們中有些人很容易混淆;) – quoo 2010-01-05 15:59:30