Ale*_*ber 4 apache-flex label flex4 flex4.5 flex-spark
我有这个非常简单的自定义组件,由两个标签组成:_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>
Run Code Online (Sandbox Code Playgroud)
我的问题是:当我调用myLabel.setColor(0xFF0000)时; 文本不会更改为红色,但保持默认的绿色 - 即使我可以在调试器中看到跟踪.
请问有什么想法,为什么颜色不变?
我也知道,我可以将上面的组件更改为:
private var _color:uint;
<s:Label id="_right" width="25" fontWeight="bold" color="{_color}"/>
Run Code Online (Sandbox Code Playgroud)
并更改_color成员,但我不想再引入一个数据绑定,因为我将在我的应用程序中有许多ScoreLabel:

(如上所示,所有数字都是绿色 - 尽管setColor(0xFF0000)已被调用3次).
小智 8
似乎没有对Label的隐式转换,Flash Builder Premium 4.6根本不会编译,因为它说明如下:
此行有多个标记:-labelDisplay -1061:通过静态类型spark.core:IDisplayText的引用调用可能未定义的方法setStyle.
如果你改变:
_right.setStyle('color', n);
Run Code Online (Sandbox Code Playgroud)
对此:
(_right as Label).setStyle('color', n);
Run Code Online (Sandbox Code Playgroud)
它应该工作.
| 归档时间: |
|
| 查看次数: |
13129 次 |
| 最近记录: |