2012-03-23 8 views
8

次のような理由があります。テキストボックスをぼかす(入力)と、特定の条件でステータスボックスにテキストを書き込み、ボタンをクリックするとステータスボックスにテキストが書き込まれます。GWT:イベントをキューに入れる方法(Swing invokeLater()に相当)?

ボタンをクリックすると、フォーカスが当たっている場合にtextBoxがぼやけて、最初にステータスボックスがちらつくようになり、blurHandlerがその結果を書き込み、次にclickHandlerが表示されます。 clickHandlerの結果を私の考え方にしたいのは、clickHandlerが以前に結果を書き込んだかどうかをチェックするイベントをキューの最後に配置させることです。

スイングでは、SwingUtilities .invokeLater(Runnable)を試してみます。 GWTの同等物はSchedulerと言われていますが、これらの遅延または最終的なコマンドは常に現在のイベントの後で次のイベントの前に実行されるようです。 これまでのところ、Scheduler.scheduleFixedDelayを100msの遅延で使用し、各ブラウザのclickHanlderの後に来ることを願っています。 同様に答えをproblemとしてください。

私はこれのためのより良い解決策があると思います。 どのようにキューの最後にイベントを追加するか、HTMLの制限のために不可能ですか?

+0

注を参照してください。スケジューラはキューの最後にイベントを追加しますが、イベントが完了した後に次のイベントが生成されることがあります。この効果はすべてのブラウザに表示されますか? –

+0

はいすべてのブラウザにエフェクトが表示される –

+0

これが最適な解決策であるかどうかはわかりませんが、textBoxのぼかしではフォーカスが特定のボタンに移動したかどうかを確認する必要があります。それは非常にエレガントなようではありません。おそらく、このリンクは役立ちます:http://stackoverflow.com/questions/7096120/how-to-determine-where-focus-went – nogridbag

答えて

4

試してみてください。

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

         @Override 

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

あなたの問題はHTMLではなく、様々なブラウザのJavaScriptエンジンとは何の関係も*を*していないことを

Class Scheduler

+0

私はすでにこれを試しました。これを行うと、blurHandlerはまだコマンドをclickHandlerの前に実行します。私はFF、Chrome、Safariのデベロッパーモードとプロダクションモードでこれを試しました - すべてのブラウザで同じフリッカー効果があります。 –

関連する問題