2017-01-16 7 views
0
public void paintComponent(Graphics g) { 
    Image frstWinBackg = new ImageIcon("new.jpg").getImage(); 
    g.drawImage(frstWinBackg, 0, 0, getWidth(), getHeight(), this); 
} 

上記のコードで画像ファイルをJPanelという名前で描画しています。プロジェクトの実行可能なjarファイルを作成するときに、そのイメージファイルを同じフォルダに保存する必要があります。私はjarファイルと一緒に画像ファイルを提供することは良い考えではないと思うので、この画像ファイルをjarファイル内に圧縮する方法はありますか?jarファイルの外に同じフォルダ内に画像を保存したくない場合

+0

いいえ、あなたは、同じフォルダ内の画像ファイルを保存する必要はありません。好きな場所に置いておくことができます。たとえば、JARファイルの中に置くことができます。あなたが何を求めているのか不明です。 – EJP

+0

jarファイルを実行すると、イメージは表示されません。しかし、イメージファイルをjarファイルと同じフォルダに保存すると、このイメージはバックグラウンドとして表示されます。しかし、もし私がjarファイルを実行すると、画像は同じフォルダーに保存されずに背景として表示されます。 –

+1

"jarファイルを実行すると、イメージは表示されません。"はい、.jarファイル内のエントリが別のファイルではないためです。代わりに 'ImageIO.read(getClass()。getResource(" new.jpg "))'を使用してください。あなたのコンストラクタで*一度それを読んでください。 paintComponentメソッドは、毎秒何回も呼び出すことができます*塗装するたびにファイルを読み込むと、パフォーマンスに顕著な影響があります。 – VGR

答えて

2
public void paintComponent(Graphics g) { 
    Image frstWinBackg = new ImageIcon("new.jpg").getImage(); 
    g.drawImage(frstWinBackg, 0, 0, getWidth(), getHeight(), this); 
} 

、画像ファイルは、paintComponent()メソッド内部読み出されます。 paintComponent()メソッドは1秒に数回呼び出すことができるため、毎回イメージファイルを検索します。したがって、イメージを表示するには、イメージファイルをjarファイルの同じフォルダに保存する必要があります。

イメージファイルを外部に提供したくない場合は、コンストラクタ内のイメージを読み込み、paintComponent()メソッドで描画する必要があります。

コンストラクタでは、画像ファイルを読むために:

Image img = ImageIO.read(getClass().getResource("resources/new.jpg")); 

を次に、paintComponent()メソッドは次のようになります。

public void paintComponent(Graphics g) { 
    g.drawImage(img, 0, 0, getWidth(), getHeight(), this); 
    g.drawImage(img, 0, 0, this); 
} 
1

JAR内のイメージをリソースとして保存することができます。このtutorialは、方法を説明しています。あなたがそれを読むとき、私はあなたのビルドシステム(Maven、Gradleなど)のためにそれを採用できると思います。このコードで

関連する問題