2012-04-19 13 views
0

フレームの中央に背景イメージを描画したいと思います。私のイメージは窓のように大きくないので、黒い背景を付けたい。ここで Java - 背景の描画問題

は、私が使用するコードです:私はopaqeするように枠を設定した場合

public void paint(Graphics g) 
{ 
    if(this.background != null) 
    { 
     int bounds_top = getHeight()/2; 
     int bounds_left = getWidth()/2; 
     int half_height = this.background.getHeight(null)/2; 
     int half_width = this.background.getWidth(null)/2; 
     g.drawImage(this.background, bounds_left - half_width, bounds_top - half_height, this.background.getWidth(null), this.background.getHeight(null), this); 

     this.setBackground(Color.black); 
     //this.setOpaque(false); 
    } 
} 

が、私の画像が表示されますが、背景は灰色です。 不透明をfalseに設定すると、フレームは黒色になり、画像は表示されません。

ここで私の質問ですが、私は自分のイメージを表示し、バックグラウンドを持つことができますか?

答えて

0

私はそれを解決するためにlitleトリックを見つけました:

Graphics2D g2 = (Graphics2D) g; 
g2.setPaint(Color.BLACK); 
g2.fill(new Rectangle2D.Double(0, 0, getWidth(), getHeight())); 
g.drawImage(this.background, bounds_left - half_width, bounds_top - half_height, this.background.getWidth(null), this.background.getHeight(null), this); 

これはうまく動作します。

1

イメージを背景に描画し、背景色を黒に設定しています。最初に背景色を黒に設定してから、イメージを描画してみてください。それ以外の場合は、イメージ上に黒を描いているように見えます。

+0

私はdrawImageの前にsetBackgroundを配置しようとしましたが、以前と同じ結果が得られました – Manitoba

3

JPanelの子でこれを行う場合は、コンストラクタでsetBackground(Color.black);に電話し、paintComponentにコードを実装し、最初に黒い背景にsuper.paintComponent(g);を呼び出します。