设置spark.components.Label的文本颜色

时间:2011-11-17 09:11:21

标签: flex label flex4 flex4.5 flex-spark

我有这个非常简单的自定义组件,由两个Labels _left _right 组成。

它应代表游戏中的几种得分:1.2.3.4.5。 6

最后一个数字(" 6"在上面的示例中)如果刚刚更改(在当前游戏回合中),则应采用粗体字体,否则所有数字应该相同。

最后一个号码也应该是红色或绿色(取决于它是""坏"或"好"得分)。

以下是ScoreLabel.mxml的源代码:

<?xml version="1.0" encoding="utf-8"?>
<s:HGroup 
    xmlns:fx="http://ns.adobe.com/mxml/2009" 
    xmlns:s="library://ns.adobe.com/flex/spark" 
    gap="0">

    <fx:Script>
        <![CDATA[
            public function setText(str:String, changed:Boolean=false):void {
                if (!changed) {
                    _right.text = '';
                    _left.text = str;
                    return;
                }

                var array:Array = str.split('.');
                _right.text = array.pop();
                _left.text = array.join('.') + '.';
            }

            public function setColor(n:uint):void {
                _right.setStyle('color', n);
                trace('setColor: ' + n);
            }
        ]]>
    </fx:Script>

    <s:Label id="_left" width="100%" textAlign="right"/>
    <s:Label id="_right" width="25" fontWeight="bold" color="#006600"/>

</s:HGroup>

我的问题是:当我调用 myLabel.setColor(0xFF0000); 时,文本不会变为红色,但保持默认的绿色 - 即使我可以看到跟踪在调试器中。

请问,为什么颜色不会发生变化?

我也知道,我可以将上面的组件更改为:

    private var _color:uint;

    <s:Label id="_right" width="25" fontWeight="bold" color="{_color}"/>

并更改 _color 成员,但我不想再引入一个数据绑定,因为我的应用程序中会有很多ScoreLabel:

screenshot

(如上所示,所有数字都是绿色 - 尽管 setColor(0xFF0000)已被调用3次)。

1 个答案:

答案 0 :(得分:8)

似乎没有对Label的隐式转换,Flash Builder Premium 4.6根本无法编译,因为它说明如下:

  

此行有多个标记:   -labelDisplay   -1061:通过带有静态类型spark.core的引用调用可能未定义的方法setStyle:IDisplayText。

如果你改变:

_right.setStyle('color', n);

到此:

(_right as Label).setStyle('color', n);

它应该有用。