Apache flex Actionscript 3.0->;如何从UIComponent重写受保护的方法
我想在ActionScript中创建一个自定义按钮 这是我的代码: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
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,然后为其添加额外的逻辑?对。我们不应该破坏默认行为。此外,我认为重要的是,如果您只想使用鼠标悬停事件,不要扩展组件,而是将其组合。