2012-03-24 2 views
1

UI用のSwingを使用して、Javaでマッピングアプリケーションを作成しています(この記事の最後にプロトタイプの図が含まれています)。マップは、JPanelを拡張するカスタムMapPanelクラスを使用して実装されます。マップは、そのpaintMap()メソッドが呼び出されるたびにMapPanelにペイントされる一連の300x300イメージ(タイル)としてサーバーからフェッチされます。コードの長さと複雑さ(複数のクラス、など)に、私はここにそれのすべてを含めることはできませんが、paintMap()メソッドは、基本的に次のように動作します。カスタムペイントを使用したSwingのレイヤードパネル

// Loop for each map tile (image, xPos, yPos) 
getGraphics().drawImage(image, xPos, yPos, 300, 300, null); 

私は別のJPanelを持っていると思います(ズームコントロール用のJSliderを含む)がマップパネルの上にオーバーレイされていますが、これを動作させるのが難しいです。マップをペイントすると、オーバーレイされたJPanelが消えます。 paintMap()メソッドでオーバーレイされたJPanelを再描画すると、マップがドラッグされている(したがって、連続的に再描画された)ときにちらつきが激しくなります。

どのようにちらつきなく私のUIを実装することができますか?

UI prototype

答えて

3
getGraphics().drawImage(image, xPos, yPos, 300, 300, null); // WRONG!! 
  1. getGraphics()を呼び出さないでください - 代わりJPanelJComponentpaintComponent(Graphics)をオーバーライドし、そうするように要求されたときにペイントします。
  2. ImageObserver
+0

drawImage()をpaintComponentメソッドに呼び出すと、問題が解決したようです - ありがとう! – Jonathan

0

This articleとして使用this所与Swingコンポーネント上の任意の効果をoverpaintするのJLayeredPane抽象ベースクラスを使用して記載されています。