Actionscript 3.0 - >如何从UIComponent覆盖受保护的方法

时间:2011-05-30 06:58:47

标签: flex actionscript-3 actionscript flash-builder

我想在ActionScript中创建自定义按钮。

这是我的代码:

import flash.events.MouseEvent;

import mx.controls.Alert;

import spark.components.Button;

public class BookViewButton extends Button
{
    public function BookViewButton()
    {
        super();
    }
    override protected function mouseOver(event:MouseEvent,increase:int,newImageSource:String):void{
        Alert.show("mouseOver for new class works");
    }
}

但Adobe Flash Builder将该方法重写为错误。

我尝试更改新方法签名以使其完全匹配,如下所示:(我认为错误可能是因为我在mouseOver函数中添加了额外的参数,因此Flex可能没有将其识别为最重要的)

        override protected function mouseOver(event:MouseEvent):void{
        Alert.show("mouseOver for new class works");
    }

但它仍然不起作用。同样的小红色感叹号出现,表示错误。

我非常感谢任何帮助。感谢。

2 个答案:

答案 0 :(得分:2)

如果您在Spark mouseOver()层次结构中使用Button方法,您使用什么SDK版本?

Spark按钮有mouseEventHandler()方法覆盖:

override protected function mouseEventHandler(event:Event):void
{
    super.mouseEventHandler(event);
    var mouseEvent:MouseEvent = event as MouseEvent;
    if (event.type == MouseEvent.ROLL_OVER)
    {
        // My roll over logic here
    }
}

最好发布IDE为您提供的错误文本。要复制它,只需在Flash Builder中打开Problems视图,找到您的错误消息并通过上下文菜单进行复制。

答案 1 :(得分:1)

您不能在此使用override,因为基类Button没有要覆盖的方法mouseOver

如果删除override关键字,它应该可以正常工作。也就是说,你需要为你的函数添加一个监听器,以便在鼠标悬停时调用它。像这样:

import flash.events.MouseEvent;
import mx.controls.Alert;
import spark.components.Button;

public class BookViewButton extends Button
{
    public function BookViewButton()
    {
        addEventListener(MouseEvent.MOUSE_OVER, _mouseOver);
    }

    private function _mouseOver(event:MouseEvent):void
    {
        Alert.show("mouseOver for new class works");
    }
}

super();

上的信息

除非有要解析的参数,否则不需要在扩展类的构造函数中调用super。实施例。

package
{
    public class A extends Object
    {
        public function A()
        {
            trace("A");
        }
    }
}

扩展课程:

package
{
    public class B extends A
    {
        public function B()
        {
            trace("B");
        }
    }
}

如果我们这样做:

var thing:B = new B();

您将获得输出:

A
B

但是,如果您想要构造函数的参数,则需要将它们解析为使用super()扩展的类的构造函数。像这样:

public class A extends Object
{
    public function A(arg:String)
    {
        trace(arg);
    }
}

public class B extends A
{
    public function B(arg:String)
    {
        super(arg);
    }
}

现在这将输出“asdf”:

var thing:B = new B("asdf");