2017-09-20 14 views
0
  1. 汚れた領域を塗り直すと、パフォーマンスが改善されますか?Swingで汚れた領域のみを再描画する方法は?

  2. 答えが「はい」の場合、どうすればよいですか? 元はpaintaint(Graphics)を呼び出すためにrepaint()を使っています。しかし、最近私は、repaint()が実際には塗り替え(0,0、幅、高さ)していることを認識しています。 repaint()でパラメータを指定してダーティ領域を指定すると、そのデータはどのようにpaintComponent(Graphics)に渡されますか?

+0

* "コードを使用してコードを最適化しない限り、ダーティ領域の再ペイントではパフォーマンスが向上しますか?"現在の 'clip'境界をチェックして、それに現れるものだけを更新するのでない限り、パフォーマンスの改善はほとんどありません。つまり、Javaはまだ終了したビットマップ全体を画面にペイントする必要があるからです - 件名の説明がある[AWT and Swingのペイント](http://www.oracle.com/technetwork/java/painting-140037.html)をご覧ください – MadProgrammer

答えて

1

私は汚い地域、どのような方法でそれがpaintComponent(グラフィックス)に、そのようなデータを渡しますを指定するパラメータで再描画()を使用している場合は?

「クリップ境界」またはグラフィックスオブジェクトは、ダーティ領域を再描画

1.Doesのみパフォーマンスを向上させる特定の領域に設定されますか?

なぜですか?絵画の問題がありますか?理由がない限り、コードをマイクロ最適化しないでください。コードは維持したりデバッグするのが難しくなります。余分なロジックを追加して、どの領域を再描画する必要があるかを判断します。

また、複数の再描画要求が1つの要求にマージされることに注意してください。したがって、コンポーネントの左上隅を再描画する要求を出し、直ちに右下隅の塗り替えを要求すると、これら2つの要求は両方の領域を含む領域にマージされます。つまり、コンポーネント全体が再描画されます。あなたは何のためにも余分な仕事をしています。

0

JComponentの「汚れた」領域のみを再描画するには、RepaintManagerを使用する必要があります。あなたも、あなた自身のカスタムバージョンでRepaintManagerを置き換えることができ

RepaintManager rm = RepaintManager.currentManager(component); 

:あなたが現在RepaintManagerを得ることができます。詳細はOracleのウェブサイトをご覧ください。

+0

RepaintManagerを直接使用しないでください汚れた領域をペイントするRepaintリクエストは、コンポーネントに対して再描画(...)リクエストを行うたびにSwingによって自動的にRepaintManagerに転送されます。指定されたリージョンはダーティリージョンとして追加されます。 RepaintManagerは、これらのダーティ領域を統合して、コンポーネントのpaint()を呼び出します。 – camickr

関連する問題