Apache flex 强制组件重新绘制它';s焦点

Apache flex 强制组件重新绘制它';s焦点,apache-flex,focus,redraw,Apache Flex,Focus,Redraw,我还有一个“我该怎么做”的问题:) 假设我有一个组件,并希望在运行时更改其焦点颜色。下面是一个示例(我排除了任何按钮等,以防止组件失去焦点,因为在这种情况下,它会完全改变颜色): 我有什么:计时器在滴答作响。属性正在更改(您可以看到,例如,在浏览器中切换选项卡时..只需在颜色更改时捕捉正确的状态) 我想要什么:如何在没有魔法的情况下重新绘制这个焦点(我已经尝试了所有的方法,从“validate”开始,我尝试在整个应用程序上调用updateDisplayList(),我尝试调用styleCha

我还有一个“我该怎么做”的问题:) 假设我有一个组件,并希望在运行时更改其焦点颜色。下面是一个示例(我排除了任何按钮等,以防止组件失去焦点,因为在这种情况下,它会完全改变颜色):


我有什么:计时器在滴答作响。属性正在更改(您可以看到,例如,在浏览器中切换选项卡时..只需在颜色更改时捕捉正确的状态)

我想要什么:如何在没有魔法的情况下重新绘制这个焦点(我已经尝试了所有的方法,从“
validate
”开始,我尝试在整个应用程序上调用
updateDisplayList()
,我尝试调用
styleChanged
…aggrh..我没有主意了:))

有什么想法吗


与往常一样,我们非常感谢您的帮助:)

如果您使用
themeColor
focusTest.drawColor(true)
它工作得很好。您必须使用drawFocus()才能重新着色,我不认为focusColor是Flex 3的setStyle属性(仅在Flex 4中使用)

很难发现,因为如果您使用了不正确的setStyle/getStyle属性,Flex不会抛出任何错误,它只会忽略它们

    if (focusTest.getStyle('themeColor') != 0x008CEA) {
        focusTest.setStyle('themeColor', 0x008CEA);
    } else {
       focusTest.setStyle('themeColor', 0xFF0000);
    } 
   focusTest.drawFocus(true);
完整代码:

<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
                creationComplete="init()">
    <mx:Script><![CDATA[    
        private function init():void {
            //putting focus inside needed component
            focusTest.setFocus();
            focusTest.setSelection(0, 0);

            // creates a new Timer
            var minuteTimer:Timer = new Timer(1000, 30);

            // designates listeners for the interval and completion events
            minuteTimer.addEventListener(TimerEvent.TIMER, onTick);
            minuteTimer.addEventListener(TimerEvent.TIMER_COMPLETE, onTimerComplete);

            // starts the timer ticking
            minuteTimer.start();
        }    
        public function onTick(event:TimerEvent):void {
            // displays the tick count so far
            // displays the tick count so far

            trace("tick " + event.target.currentCount);
            if (focusTest.getStyle('themeColor') != 0x008CEA) {
                focusTest.setStyle('themeColor', 0x008CEA);
            } else {
                focusTest.setStyle('themeColor', 0xFF0000);
            }

            focusTest.drawFocus(true);
            //Update everything somehow :)             
        }    
        public function onTimerComplete(event:TimerEvent):void {
            trace("Time's Up!");
        }            
    ]]></mx:Script>
    <mx:TextInput id="focusTest" width="222"/>
</mx:Application>

如果您使用
颜色
聚焦测试。drawColor(true)
效果很好。您必须使用drawFocus()才能重新着色,我不认为focusColor是Flex 3的setStyle属性(仅在Flex 4中使用)

很难发现,因为如果您使用了不正确的setStyle/getStyle属性,Flex不会抛出任何错误,它只会忽略它们

    if (focusTest.getStyle('themeColor') != 0x008CEA) {
        focusTest.setStyle('themeColor', 0x008CEA);
    } else {
       focusTest.setStyle('themeColor', 0xFF0000);
    } 
   focusTest.drawFocus(true);
完整代码:

<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
                creationComplete="init()">
    <mx:Script><![CDATA[    
        private function init():void {
            //putting focus inside needed component
            focusTest.setFocus();
            focusTest.setSelection(0, 0);

            // creates a new Timer
            var minuteTimer:Timer = new Timer(1000, 30);

            // designates listeners for the interval and completion events
            minuteTimer.addEventListener(TimerEvent.TIMER, onTick);
            minuteTimer.addEventListener(TimerEvent.TIMER_COMPLETE, onTimerComplete);

            // starts the timer ticking
            minuteTimer.start();
        }    
        public function onTick(event:TimerEvent):void {
            // displays the tick count so far
            // displays the tick count so far

            trace("tick " + event.target.currentCount);
            if (focusTest.getStyle('themeColor') != 0x008CEA) {
                focusTest.setStyle('themeColor', 0x008CEA);
            } else {
                focusTest.setStyle('themeColor', 0xFF0000);
            }

            focusTest.drawFocus(true);
            //Update everything somehow :)             
        }    
        public function onTimerComplete(event:TimerEvent):void {
            trace("Time's Up!");
        }            
    ]]></mx:Script>
    <mx:TextInput id="focusTest" width="222"/>
</mx:Application>


如果我不得不猜测“focusColor”不是一个可以动态重画的东西;因此,您要么失去焦点,然后重新获得焦点(这听起来像是您通过切换浏览器选项卡所做的),要么覆盖updateDisplayList()以在焦点环发生变化时重新绘制焦点环。您必须遍历框架代码,以确定焦点元素的绘制位置/时间/方式。Aww。。该对的最聚焦。drawFocus(假);focusTest.drawFocus(真);'解决了这个问题。。我只是想知道还有没有更干净的解决方案?:)另外,谢谢你的帮助:)你就像一个超级灵活的人。。第一个地方是throubles,如果我不得不猜测“focusColor”不是一个可以在飞行中重新绘制的东西,那么在正确的地方敲击就会咯咯地笑;因此,您要么失去焦点,然后重新获得焦点(这听起来像是您通过切换浏览器选项卡所做的),要么覆盖updateDisplayList()以在焦点环发生变化时重新绘制焦点环。您必须遍历框架代码,以确定焦点元素的绘制位置/时间/方式。Aww。。该对的最聚焦。drawFocus(假);focusTest.drawFocus(真);'解决了这个问题。。我只是想知道还有没有更干净的解决方案?:)另外,谢谢你的帮助:)你就像一个超级灵活的人。。第一个是throubles,打在正确的位置giggleSight无法让它工作。。如果我切换选项卡并返回,它甚至不会更新。但是无论如何,谢谢你的尝试:)顺便说一句,我已经看到有人在类似的案例中推荐使用“themeColor”,但我有一些疑问。。它正在改变一个全局颜色,如果其他人正在使用它呢?嗨。我把我使用/测试的完整代码放在上面,它工作得很好。试试看,也许有一些细微的差别,这很奇怪,但在这里不起作用(完整的代码..我可以看到跟踪,每秒通知我更改,但应用程序中没有任何可视更改。Uhu..发现问题:)我使用的是4.1.Ah,旧的“您使用的是什么版本的问题?”:)Sight无法使其工作。。如果我切换选项卡并返回,它甚至不会更新。但是无论如何,谢谢你的尝试:)顺便说一句,我已经看到有人在类似的案例中推荐使用“themeColor”,但我有一些疑问。。它正在改变一个全局颜色,如果其他人正在使用它呢?嗨。我把我使用/测试的完整代码放在上面,它工作得很好。试试看,也许有一些细微的差别,这很奇怪,但在这里不起作用(完整的代码..我可以看到跟踪,每秒都会通知我更改,但在应用程序中没有任何可视更改。Uhu..发现问题:)我使用的是4.1.Ah,旧的“您使用的是什么版本的问题?”:)