開発中の Swing アプリで再描画を行うと、奇妙な問題が発生します。特定のコンポーネントのテキスト (ウィンドウの一番下にあるステータス バーのテキスト ラベル) を設定すると、画面の非常に異なる領域にあるテーブル全体が再描画されるように指示されていることがわかりました。基本的にステータスバーのテキストを設定するたびにウィンドウ全体を再描画するように求められているように見えるため、パフォーマンスの問題が発生しています。
何が起こっているのかを把握しようとして RepaintManager をさまよい、このテキストのラベルを設定しようとすると、メインの JPanel 全体がダーティ コンポーネントとしてマークされていることがわかりました。ただし、どの時点でそれが発生しているのか、正確にはなぜそれが発生しているのかをデバッグするのに問題があります。再描画システムについて調べてみましたが、他のテキスト ラベルが設定されているときに重複しないテーブルを再描画する必要がある理由がわかりません。
Swing Explorer を使用して、レイアウトの境界線を視覚化して、異常な方法でオーバーラップしていないことを確認しました。すべて問題ないように見えます。
JTable に再描画を要求している一連の呼び出しを特定する方法を探しています。paintComponent() にブレークポイントを追加してスタックをたどると、RepaintManager の paintDirtyRegions() 呼び出しの内部に行き着き、メインの JPanel 全体 (ウィンドウ内のすべてを含む) が tmpDirtyComponents 変数内に置かれます。
最初に単一のステータステキストラベルを設定しただけで、JPanel全体がダーティとしてマークされる方法を誰か説明できますか? そうでない場合は、エラーを見つけるためにどこにフックするかについて、いくつかのガイダンスを提供していただけますか?
ご協力いただきありがとうございます。