这是我的问题:
我在面板上有一个主画布'黑板', 这个画布本身有几个孩子,比如工具栏(瓷砖),标签和一些蒙皮。
问题是,当我移动到矩形工具并开始绘制矩形时,如果我想在我点击其他工具(如“圆圈”或“选择”)时更改工具,则该按钮将无法捕捉到单击事件,画布将抓住鼠标并开始绘制。
就像在图片上一样。一旦我开始画画,我就无法更换工具。
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>
答案 0 :(得分:1)
当点击来自工具栏时,您可以使用target的MouseEvent属性来区分合并。 只需在LiveDocs上获取一个战利品就可以了解目标属性是什么。
祝你好运!答案 1 :(得分:1)
谢谢, 我发现了一些类似的帖子实际上我只是在我的工具栏中听了鼠标并停止了事件传播,所以画布没有抓住它。