Пример:

Код AS3:
package
{
import flash.display.Sprite;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.events.TimerEvent;
import flash.net.URLLoader;
import flash.net.URLRequest;
import flash.text.TextField;
import flash.utils.Timer;
public class Test extends Sprite
{
public function Test()
{
tf = new TextField();
tf.wordWrap = true;
tf.border = true;
addChild(tf);
urlLoader = new URLLoader();
urlLoader.addEventListener(Event.COMPLETE, urlLoader_completeHandler);
urlLoader.load(new URLRequest("1.txt"));
timer = new Timer(100, 1);
timer.addEventListener(TimerEvent.TIMER, timer_timerHandler);
var button:Sprite = new Sprite();
button.graphics.beginFill(0x00FFF0);
button.graphics.drawRect(100, 100, 100, 100);
button.addEventListener(MouseEvent.CLICK, button_clickHandler);
addChild(button);
}
private var urlLoader:URLLoader;
private var tf:TextField;
private var timer:Timer;
private function urlLoader_completeHandler(event:Event):void
{
tf.text = urlLoader.data;
}
private function button_clickHandler(event:MouseEvent):void
{
tf.width = Math.floor(200 * Math.random()) + 10;
trace("button click ", tf.getLineLength(3));
timer.start();
}
private function timer_timerHandler(event:TimerEvent):void
{
trace("timer ", tf.getLineLength(3));
}
}
}
trace("button click ", tf.getLineLength(3)) выводит значение до изменения ширины текстового поля. Trace в обработчике таймера выводит правильные значения, если поставить определенную задержку.
Как я понимаю, такое поведение будет у всех методов, которые зависят от wordwrap.
Можно ли кроме как при помощи таймера отловить окончание пересчета текстового поля? Может какое-то событие есть, о котором я не знаю?