2008-10-28 85 views
0

这里是我的问题:FLEX3,点击和事件捕捉,特殊情况

我有一个主画布“黑板”的面板, 这种帆布有本身的几个孩子的,就像一个工具栏(牌),标签和一些皮肤。

问题是,当我移动到矩形工具,我开始绘制矩形,如果我想改变工具,当我点击其他工具,如'圆'或'选择'按钮不会赶上点击事件,画布将抓住鼠标并开始绘画。

就像在picture.So我无法改变工具,一旦我开始绘画。

alt text http://www.freeimagehosting.net/uploads/397a7cd49e.png

我怎么能不使画布反应过来的时候它是一个工具,或者我怎么能让按钮第一赶上点击并告诉画布没有做画什么。

当然,我可以把工具栏放在画布上的其他地方,但是因为空间很重要,所以我希望按钮放在画布上。

我愿意接受任何建议。

===下面是一些代码,以显示它如何工作内部。 ===

<?xml version="1.0" encoding="utf-8"?> 
<mx:Panel xmlns:mx="http://www.adobe.com/2006/mxml" 
      xmlns:degrafa="http://www.degrafa.com/2007" 
      xmlns:comp="org.foo.bar.view.components.*" 
      layout="absolute" 
      title="Tableau"> 


    <mx:Script> 
    <![CDATA[ 
     import org.edorado.edoboard.ApplicationFacade; 
    ]]> 
    </mx:Script> 

    <mx:Canvas id="blackBoard"> 

     <degrafa:Surface id="boardSurfaceContainer"> 
      skinning  
    </degrafa:Surface> 

     <!-- Tool bar --> 
     <comp:ToolbarView 
      id = "toolbar" 
      name = "toolbar" 
      verticalScrollPolicy="off" 
      horizontalScrollPolicy="off" 
      bottom="5" 
      right="5" 
      top="5" 
      direction="vertical" 
      width="30" /> 

     <mx:Label x="10" y="10" text="Label" color="#FFFFFF" id="lbl"/> 

    </mx:Canvas> 

</mx:Panel> 

工具栏是包含在瓷砖中的按钮列表。 画布“黑板”与多个事件处理相关联,特别是鼠标向上和移动以绘制形状。

... 
boardCanvas.addEventListener(MouseEvent.MOUSE_DOWN, handleMouseDown); 
      boardCanvas.addEventListener(MouseEvent.MOUSE_UP, handleMouseUp); 
... 
     private function handleMouseDown(event:MouseEvent):void { 
      // Get the current mouse location wich may be adjusted to the grid 
      var selectPoint:Point = boardCanvas.globalToLocal(new Point(event.stageX, event.stageY)); 
      startPoint = snapPoint(selectPoint.x, selectPoint.y); 
      boardView.lbl.text = '(' + startPoint.x +',' + startPoint.y + ')'; 
.... 

工具栏还听点击

<?xml version="1.0" encoding="utf-8"?> 
<mx:Tile xmlns:mx="http://www.adobe.com/2006/mxml"> 

    <mx:Script> 
     <![CDATA[ 
      import mx.charts.BubbleChart; 
      import org.edorado.edoboard.view.components.shapes.*; 

      public static const TOOL_CHANGE:String = "toolChange"; 
      public static const TEXT_TOOL:String = "textTool"; 
      public static const SELECT_TOOL:String = "selectTool"; 
      public static const RECTANGLE_TOOL:String = "rectangleTool"; 

      private var b:Button = null; 

      private function handleButtonClick(event:MouseEvent):void { 
       trace("CLICKED TOOL"); 
       // selectButton.dispatchEvent(new Event(TOOL_CHANGE, true, true)) 
       b = event.target as Button; 
       b.dispatchEvent(new Event(TOOL_CHANGE, true, true)); 
      } 


     ]]> 
    </mx:Script> 

      <!-- Use class facotry ? --> 
      <mx:Button id="selectButton" 
        name="{SELECT_TOOL}" 
        selectedUpSkin="assets.skins.ToolButtonSkin" 
        width="30" 
        height="30" 
        styleName="selectButton" 
        toolTip="selection" 
        click="handleButtonClick(event); " /> 

      <mx:Button id="textButton" 
        name = "{TEXT_TOOL}" 
        selectedUpSkin="assets.skins.ToolButtonSkin" 
        width="30" 
        height="30" 
        styleName="textButton" 
        toolTip="text" 
        click="handleButtonClick(event);" /> 

      <mx:Button id="rectButton" 
        name = "{RECTANGLE_TOOL}" 
        selectedUpSkin="assets.skins.ToolButtonSkin" 
        width="30" 
        height="30" 
        styleName="rectButton" 
        toolTip="rectButton" 
        click="handleButtonClick(event);" /> 
</mx:Tile> 

回答

1

谢谢, 我发现了一些类似的帖子actualy我只听到鼠标放在我的工具栏中,并停止事件传播,以便画布不抓住它。

1

您可以用您MouseEventtarget属性来区分的行为举止时,点击来自您的工具栏。 只需在LiveDocs上获得一个战利品来了解什么是目标属性。

祝你好运!