0

我已经编写了一个自定义组件,用于在 Flex 中绘制一个圆。但是当我尝试为该组件编写单击事件或 mouseDown 事件时,它不起作用。

我在 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);
         }
     }
 }

“Hello”警报仅在特定点显示,并且猜测是在该点 (175,150) 圆的 x、y 坐标。但它不应该显示在我单击 MyCircle 组件的任何位置吗?如何以这种方式启用它?

mouseDown 函数也不适用于 MyCircle,但如果有 VBox 的事件,则会显示警报。为什么这样?有人可以指导我吗?

我应该以不同的方式为自定义组件编写事件吗?

4

2 回答 2

1

我不确定这是否适用,但存在一个错误,即某些 UIComponents 无法正确识别 click/mouseDown 事件,除非它们具有背景颜色。看看为你的圈子添加背景颜色是否有帮助。

于 2010-01-04T15:47:27.947 回答
0

您的代码中还存在一些错误,例如,您的操作脚本周围缺少脚本标记,您可能需要导入 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>
于 2010-01-04T16:09:10.287 回答