Как написать события для пользовательского компонента в flex?

StackOverflow https://stackoverflow.com/questions/1999488

Вопрос

Я написал собственный компонент для рисования круга во 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);
         }
     }
 }

Оповещение «Привет» отображается только в определенной точке, и в этой точке предполагается (175,150) координаты x, y круга.Но разве он не должен отображаться везде, где я нажимаю на компонент MyCircle??как включить его таким образом?

Также функция mouseDown не работает для MyCircle, но если есть событие для VBox, отображаются оповещения.Почему так?Может ли кто-нибудь вести меня?

Должен ли я писать события для пользовательских компонентов другим способом?

Это было полезно?

Решение

Я не уверен, применимо это или нет, но существует ошибка, из-за которой некоторые UIComponents не распознают правильно события click/mouseDown, если у них нет цвета фона.Посмотрите, поможет ли добавление цвета фона в круг.

Другие советы

В вашем коде также есть несколько ошибок, например, у вас отсутствуют теги сценария вокруг вашего 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>
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top