Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/apache-flex/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache flex Actionscript 3.0->;如何从UIComponent重写受保护的方法_Apache Flex_Actionscript 3_Actionscript_Flash Builder - Fatal编程技术网

Apache flex Actionscript 3.0->;如何从UIComponent重写受保护的方法

Apache flex Actionscript 3.0->;如何从UIComponent重写受保护的方法,apache-flex,actionscript-3,actionscript,flash-builder,Apache 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

我想在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");
    }
}
但AdobeFlashBuilder将覆盖行的方法标记为错误

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

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


我非常感谢您的帮助。谢谢。

您不能在这里使用
覆盖
,因为基类
按钮
没有方法
鼠标覆盖

如果删除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”:


您不能在此处使用
覆盖
,因为基类
按钮
没有要覆盖的方法
鼠标盖

如果删除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”:


如果您在Spark
按钮
层次结构中有
mouseOver()
方法,您会使用哪个SDK版本

火花按钮具有要覆盖的
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
视图,找到您的错误消息并通过上下文菜单进行复制。

如果您在Spark
按钮中有
mouseOver()
方法,您将使用哪个SDK版本

火花按钮具有要覆盖的
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
视图,找到您的错误消息,然后通过上下文菜单进行复制。

Hmmm这很有意义。但是,我真的应该像在代码中那样删除对超类构造函数(
super()
)的调用吗?感谢您费心编写这些。我只是想知道,因为我基本上是在扩展基本的
按钮
类,所以我应该调用超类构造函数,然后为我的自定义按钮创建额外的行为。但显然不是。谢谢。不,调用超类构造函数时不需要super():)Hmmm,这很有意义。但是,我真的应该像在代码中那样删除对超类构造函数(
super()
)的调用吗?感谢您费心编写这些。我只是想知道,因为我基本上是在扩展基本的
按钮
类,所以我应该调用超类构造函数,然后为我的自定义按钮创建额外的行为。但显然不是。谢谢。不需要,超类构造函数将在不需要super()的情况下被调用:)但是请解释一下,您在哪里找到了要重写的
mouseOver()
方法?我想我实际上在哪里都没有找到它。我猜应该有这样的方法。或者我误读了一些信息。我不知道。我住的地方是凌晨4:30。这应该可以部分解释这一点隐马尔可夫模型。。如果我理解正确,您正在调用超类的eventHandler,然后为其添加额外的逻辑?对。我们不应该破坏默认行为。此外,我认为重要的一点是,如果您只想使用鼠标悬停事件,请不要扩展组件,将其组合。但是请解释一下,您在哪里找到了要覆盖的
mouseOver()
方法?我认为实际上在任何地方都找不到它。我猜应该有这样的方法。或者我误读了一些信息。我不知道。我住的地方是凌晨4:30。这应该可以部分解释这一点隐马尔可夫模型。。如果我理解正确,您正在调用超类的eventHandler,然后为其添加额外的逻辑?对。我们不应该破坏默认行为。此外,我认为重要的是,如果您只想使用鼠标悬停事件,不要扩展组件,而是将其组合。