2012-03-23 22 views
8

拥有以下szenario:模糊文本框(输入)将文本写入到我的状态框(在某些情况下),然后单击按钮也会将文本写入状态框。GWT:如何将事件放入队列(相当于Swing invokeLater())?

现在当单击该按钮时,如果它被聚焦,它将模糊我的文本框,并且会导致状态框闪烁,因为blurHandler会首先写入其结果,然后是clickHandler。 正如我想让clickHandler出现的结果是我的想法是让blurHandler在队列的末尾放置一个事件,它检查clickHandler是否已经写入结果。

在Swing中,我会尝试SwingUtilities .invokeLater(Runnable)。 GWT中的等价物据说是Scheduler,但那些延迟或最终命令似乎总是在当前事件之后和下一个之前运行。 到目前为止,我使用Scheduler.scheduleFixedDelay延迟100ms,并希望它在每个浏览器中的clickHanlder之后。 查看类似的problem的回答。

我认为必须有更好的解决方案。 如何真的添加一个事件到队列的末尾或者由于HTML的限制而不可能?

+0

请注意,您的问题都没有*做HTML,但是有不同的浏览器的JavaScript引擎。调度程序将事件添加到队列末尾,但浏览器可能会在事件完成后生成下一个事件。这种效果是否出现在所有浏览器中? – 2012-03-23 08:21:11

+0

是的效果出现在所有浏览器 – 2012-03-23 08:46:35

+0

我不确定这是否是最好的解决方案,但在textBox模糊你可能不得不看看焦点是否转到特定的按钮。它看起来不太优雅。也许这个链接将有所帮助:http://stackoverflow.com/questions/7096120/how-to-determine-where-focus-went – nogridbag 2012-03-23 14:56:32

回答

4

尝试:

Scheduler.get().scheduleDeferred(new Command() { 

         @Override 

         public void execute() { 
           ....... 
         } 
       }); 

Class Scheduler

+0

我已经试过这个。在blurHandler中执行此操作仍然会使命令在clickHandler之前执行。我在FF,Chrome,Safari浏览器的开发和生产模式中尝试过这种方式 - 所有浏览器都具有相同的闪烁效果。 – 2012-03-23 08:46:00