Actionscript 3.0 -> Как переопределить защищенный метод из UIComponent - PullRequest
0 голосов
/ 30 мая 2011

Я хочу создать пользовательскую кнопку в 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 ]

2 голосов
/ 30 мая 2011

Какую версию SDK вы используете, если у вас есть метод mouseOver() в иерархии Spark Button?

Кнопка 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. Чтобы скопировать его, просто откройте Problems представление в Flash Builder, найдите сообщение об ошибке и скопируйте его через контекстное меню.

1 голос
/ 30 мая 2011

Вы не можете использовать override здесь, потому что базовый класс Button не имеет метода mouseOver для переопределения.

Если вы удалите ключевое слово переопределения, оно должно работать нормально.Тем не менее, вам необходимо добавить слушатель для вашей функции, чтобы он вызывался при наведении курсора мыши.Например:

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");
...