私たちの Swing アプリケーションの一部のユーザーは、奇妙なアーティファクトがディスプレイに表示されると報告しています。これは、コンポーネントが 1 秒か 2 秒間適切に再描画されないことから、アプリケーション全体が、ウィンドウの領域を覆うタイル張りの壁紙のように再描画されることまで、さまざまです。
このアプリは、経験豊富な Java の専門家から大学を出たばかりの若手まで、あらゆるレベルの開発者によって 5 年ほどかけて開発されてきました。私は今、次の数ヶ月かそこらで、できるだけ多くの悪さを正そうとする仕事に直面しています.
これのいくつかは簡単に対処できます。イベント ディスパッチ スレッドでのみコンポーネントを処理し、非同期で IO を実行すると、チームの他のメンバーにメッセージが伝わることを願っています。
私が知りたいのは、グラフィックス コンテキスト、特に paintComponent() コンテキストを処理する最善の方法です。私はたくさん見ます...
public void paintComponent( Graphics g ) {
super.paintComponent( g );
Graphics2D gfx = (Graphics2D)g;
// ...Whole lotta drawing code...
}
これを行う方が良い方法ですか?
public void paintComponent( Graphics g ) {
super.paintComponent( g );
Graphics2D gfx = (Graphics2D)g.create();
// ...Whole lotta drawing code...
gfx.dispose();
}
g パラメータが他のペイントで再利用される場合、それを良好な状態に復元したり、AffineTransforms を元に戻したりする必要はありませんか?