2011-01-11 12 views
1

私はこれを数時間見てきましたが、自分の道を案内するものは何も見つかりませんでした。私はSwingWorkerでいくつかのバックグラウンド処理を実行しているWindows Swing GUIプログラムを持っています。これはまた、進捗ダイアログを使用して、バックグラウンド処理にどれくらいの時間がかかるかをユーザーに知らせる。Swingのalt-tabでペインティングの問題を診断するのに必要なヘルプ

このシステムの元の設計者は、進行状況ダイアログの[キャンセル]ボタンを除いて、マウスとキーボードの入力を無効にすることを決定しました。彼らはマウスとキーボードのすべての事象を無視するガラス板を使ってこれを行いました。

実際の問題は、ユーザーalt-tabsまたはスクリーンセーバーが発生した場合、ガラスパネルの後ろのユーザーインターフェイスが決して再描画されないことです。プログレスダイアログは再描画されますが、これはSwingWorkerがプログレスを更新するために定期的に再描画を呼び出すためです。

私は次の場所を参考にしたいと思います。私はalt-tabでJavaで何かを見つけることができませんでした。おそらく進捗ダイアログは定義上モーダルでEDTの再描画を妨げるでしょうか?あるいは、ガラスの部分が「隠された」コンポーネントの塗り直しを防ぎますか?

おかげで、 ライアン

+1

あなたが役に立った答えを投票してください。 「自分のニーズに合ったベスト」がない場合は受け入れる必要はありません。 –

答えて

2

記事How to Write Window Listenersは、このトピックをカバーしています。このexampleを使用すると、これらに類似した各ALT-TABイベント、上のウィンドウイベントのペアが表示されます。

 
java.awt.event.WindowEvent[WINDOW_LOST_FOCUS,opposite=null,oldState=0,newState=0] on One 
java.awt.event.WindowEvent[WINDOW_DEACTIVATED,opposite=null,oldState=0,newState=0] on One 
java.awt.event.WindowEvent[WINDOW_ACTIVATED,opposite=null,oldState=0,newState=0] on One 
java.awt.event.WindowEvent[WINDOW_GAINED_FOCUS,opposite=null,oldState=0,newState=0] on One 
1

窓ガラスの不透明がtrueの場合、再描画マネージャは、以下のパネルを再描画しません。これはパフォーマンスの最適化です。

+0

これをありがとう、この1つを支配することは有用でした。私は現在、私の現在の問題は、進捗バーがalt-tabフォーカスを盗むダイアログであることが原因であることを発見しました。言い換えれば、Swing UIは実際には置き換えたウィンドウよりも高いWindows zオーダーを持っていないためです。不透明なチェックはスクリーンセーバーオプションをカバーしていました。 – Bringer128

関連する問題