2012-03-22 17 views
1

のEclipse Heliosの中でJFrameのか、JPanelの背景画像を設定する方法:私はImageTest.javaファイルを作成するときに私はそれをGoogleで検索し、コード見つけた

import java.awt.Dimension; 
import java.awt.Graphics; 
import java.awt.Image; 

import javax.swing.ImageIcon; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 

public class ImageTest { 

    public static void main(String[] args) { 
    ImagePanel panel = new ImagePanel(new ImageIcon("background.png").getImage()); 

    JFrame frame = new JFrame(); 
    frame.getContentPane().add(panel); 
    frame.pack(); 
    frame.setVisible(true); 
    } 
} 

class ImagePanel extends JPanel { 

    private Image img; 

    public ImagePanel(String img) { 
    this(new ImageIcon(img).getImage()); 
    } 

    public ImagePanel(Image img) { 
    this.img = img; 
    Dimension size = new Dimension(img.getWidth(null), img.getHeight(null)); 
    setPreferredSize(size); 
    setMinimumSize(size); 
    setMaximumSize(size); 
    setSize(size); 
    setLayout(null); 
    } 

    public void paintComponent(Graphics g) { 
    g.drawImage(img, 0, 0, null); 
    } 
} 

これは私のために働いたが、とbackground.pngを置きます同じフォルダにあります。

しかし、イメージと一緒にEclipse IDE(デフォルトパッケージ)に同じコードを貼り付けると、そのイメージはバックグラウンドとして設定されません。実際には画像が見つかりません。これが理由です。

私はそれらを同じに保ちましたpackage pack;それでも画像は見つからないので、出力はありません。

ワークスペース>プロジェクトフォルダ> war> WEB-INF> classes を開き、cmdからプログラムをコンパイルしようとしました。まだそれは表示されません。

問題の内容がわかりません。あらゆる解決策を知っている人は誰でも歓迎されます。

ありがとうございました。

設定枠も歓迎される直接上に背景...

私はこのすべて使用してコードをやったが、これはその後、作業するとき、私はGUIのWindowsビルダーに移行されます。それであなたの助けが窓の建築家でも働くでしょうか?

答えて

2
..new ImageIcon("background.png").. 

これにはフィードバックを提供しないイメージをロードするために愚かな(しかし一般的)な方法です。

background.pngは、もはやファイルではなく、現在はJarの一部になっています。その場合、それにアクセスする方法は、Class.getResource()から得られたURLを使用しています。

  1. イメージがロードできない場合に便利&有益な例外をスローしImageIOを、使用している画像をロードするスマートな方法。
+0

ちょっと感謝。私はImageIOを試して、それがうまくいくかどうかを見てみましょう。 –

+0

こんにちはアンドリュー...ありがとう、それは私のために働いた。 :) –

+0

あなたはそれを並べ替えてうれしいです。 :) –

1

これは本当にあなたの質問に答えるものではありませんが、回答が受け入れられたので、私は考えました。

このクラスは、JPanelと同様に使用できます。これは、パネルの背景にイメージをスラップし、フレームのサイズが変更されるとイメージのサイズを変更します。

public class JPanelWithBackground extends JPanel { 
Image imageOrg = null; 
Image image = null; 
{ 
addComponentListener(new ComponentAdapter() { 
    public void componentResized(ComponentEvent e) { 
     int w = JPanelWithBackground.this.getWidth(); 
     int h = JPanelWithBackground.this.getHeight(); 
     image = w>0&&h>0?imageOrg.getScaledInstance(w,h, 
       java.awt.Image.SCALE_SMOOTH):imageOrg; 
     JPanelWithBackground.this.repaint(); 
    } 
}); 
} 
public JPanelWithBackground(Image i) { 
    imageOrg=i; 
    image=i; 
    setOpaque(false); 
} 
public void paint(Graphics g) { 
    if (image!=null) g.drawImage(image, 0, 0, null); 
    super.paint(g); 
} 
} 

使用例:返信用

Image image = your image 
JFrame f = new JFrame(""); 
JPanel j = new JPanelWithBackground(image); 
j.setLayout(new FlowLayout()); 
j.add(new JButton("YoYo")); 
j.add(new JButton("MaMa")); 
f.add(j); 
f.setVisible(true); 
関連する問題