2012-05-11 3 views
1

は、私は以下の変数があります。コンストラクタでImage avatar;URL url;Graphics.drawImage()関数のImageObserverパラメータにnullを使用する必要がありますか?

を、私が設定:

this.url = new URL("http://www.robottiger.com/user.PNG"); 

this.avatar = ImageIO.read(url); 

を次に...

public void paint (Graphics g) 

に..次のものを使用するのは正しいですか?

g.drawImage(avatar, 20, 410, null); 

それともnullではなくthisすべきですか?

+4

スイングを使用している場合、そのようなタスクに対して 'paint(...)'メソッドをオーバーライドしないでください。[paintComponent(...)](http://java.sun。 com/products/jfc/tsc/articles/painting /#swing)の代わりに、どちらも大丈夫ですが、それは別のものを対象としていますが、細かいことは分かりません。 –

答えて

3

第4引数はオブザーバであり、より多くのイメージが通知されるオブジェクトが変換されます。 Imageパラメータを非同期に取得している場合にのみ、これが本当に便利であると仮定すると、完全にnullになることがあります。

2

次のようにあなたがdrawImage()のために言及されているコンストラクタは次のとおりです。

public abstract boolean drawImage(Image img, int x, int y, ImageObserver observer) 

第四引数はobject to be notified as more of the image is converted.あるので、それはnullにすることは結構です、単に画像オブザーバ、です。他の二つの返信とは対照的に

2

は、私が(例えばToolkit.createImage(URL))非同期ロードまたは生成され、あなたがImageObserverを持っている場合、それを使用すると、画像が同期ロードされたかどうかについて何らの仮定をしない(例えばImageIO.read(URL))することをお勧めしますメモリ内にある。

0

あなたは(ないファイルシステムから、またはプログラムによって構築)ネットワーク経由でImageをロードして明示的にロードするために待機していない場合、あなたは完全にImageを描画することを確認するためにImageObserverを使用する必要があります。それ以外の場合はnullを使用してください。それはうまくいくはずです。