我想在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");
}
但它仍然不起作用。同样的小红色感叹号出现,表示错误。
我非常感谢任何帮助。感谢。
答案 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");