Action Script中组件的不同部分的不同工具提示

时间:2011-08-01 19:50:53

标签: flex actionscript-3 actionscript tooltip mxml

我希望有一个工具提示,当鼠标移过组件的不同部分时,它会显示不同的内容。例如,如果它是组件的上半部分,它将显示一个工具提示。如果鼠标位于段的下半部分,则工具提示将是另一个。我有一些我编写的代码返回一个带有字符串的面板。这段代码在另一台计算机上,所以我明天会发布代码。

ActionScript中是否可以为段的不同部分提供不同的工具提示(或工具提示中的不同值)?

我到目前为止的代码是:

MyToolTip.mxml

<?xml version="1.0"?>
<mx:Panel xmlns:mx="http://www.adobe.com/2006/mxml"
implements="mx.core.IToolTip" 
alpha=".9" width="325" borderColor="black" borderStyle="solid"
cornerRadius="10" horizontalAlign="center">
<mx:Script><![CDATA[
[Bindable]
public var toolTipText:String = "";

public var _text:String;
[Bindable]
public function get text():String { return _text; } 
public function set text(value:String):void {}
]]></mx:Script>

<mx:HBox width="100%" height="100%">
<mx:Text text = "Text here" width = "50%"/>
<mx:Text text = "{toolTipText}" width = "50%"/>
</mx:HBox>  
</mx:Panel>

然后是我希望工具提示反对的动作脚本类组件。

public class MyComponent extends mx.containers.VBox {

    private var tt:MyToolTip 

    public function MyComponent() {
        this.addEventListener(ToolTipEvent.TOOL_TIP_CREATE, toolTipCreateHandler);
        this.addEventListener(MouseEvent.MOUSE_OVER, mouseOverHandler);
        tt = new MyToolTip();
    }

    override protected function drawFigure():void {
        //Need to kick the TOOL_TIP_CREATE event...and needs to be a value (eg a SPACE). 
        //If blank then no tooltip is created 
        this.toolTip = " ";
        super.drawFigure();
    }

    private function toolTipCreateHandler(event:ToolTipEvent):void {
        var toolTipText:String = "tooltip1";
        eventToolTip.toolTipText = toolTipText;
        event.toolTip = tt;
    }

    private function mouseOverHandler(event:MouseEvent):void {
        //perhaps I need to be more efficient here and only fire
        //when the mouse goes into top half or bottom half
        //This does not appear to update the toolTipText in the view
        var halfwayUp:Number = getBounds(this).height  / 2;
        if (event.localY < halfwayUp) {
            eventToolTip.toolTipText = "tooltip2";
        }
        else {
            eventToolTip.toolTipText = "tooltip1";
        }           
    }
}
}

如果工具提示已经显示,如何更新工具提示的任何帮助或指示都会很棒。

1 个答案:

答案 0 :(得分:2)

是的,它可能,诀窍是知道工具提示是如何工作的:
如果将鼠标悬停在组件上,则会创建工具提示,如果您将鼠标移出则会被销毁。因此,如果您在显示工具提示时更改文本,那么您将看不到更改,因为set toolTip()函数不会创建新的工具提示(如果已存在)。因此,解决方案是销毁当前显示的工具提示,并创建一个新工具提示。要销毁工具提示,可以将其值设置为空字符串 以下是示例代码:

<?xml version="1.0" encoding="utf-8"?>
<mx:Application 
xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" 
mouseMove="application1_mouseMoveHandler(event)">
<mx:Script>
<![CDATA[
    import mx.managers.ToolTipManager;

    protected function application1_mouseMoveHandler(event:MouseEvent):void{
        if (mouseX < 100) {
            testButton.toolTip = ""
            testButton.toolTip = "on the left side";
        } else {
            testButton.toolTip = ""
            testButton.toolTip = "on the right side";

        }
    }

]]>
</mx:Script>
<mx:Button id="testButton" label="test" width="200" height="200" />
</mx:Application>

注意:如果您想在Flex中更多地使用工具提示,您可以使用ToolTipManager.currentToolTip获取当前工具提示(并修改其属性而不会破坏它)。