2017-03-10 14 views
0

以下は、ペイントに使用するクラスです。クラスパスリソースを使用してJPanelを背景画像としてペイントすることはできません

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

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

public class BackgroundMainMenu extends JPanel { 

private static final long serialVersionUID = 1L; 
    public Image img; 

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

     public BackgroundMainMenu(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); 
     } 
} 

以下のようなシステムパスを使用すると背景が表示されます。

public class FirstWindow extends JFrame { 

    public FirstWindow() { 

    BackgroundMainMenu panel = new BackgroundMainMenu(newImageIcon("E:\\sources\\mainMenu.jpg").getImage()); 

    JFrame mainFrame = new JFrame("Program Window"); 
    mainFrame.getContentPane().add(panel); 
    mainFrame.pack(); 
    mainFrame.setVisible(true); 
    } 
} 

ただし、クラスパスリソースを使用すると機能しません。私はこの行を変更しようとしました

this(new ImageIcon(img).getImage()); 

これにこれを変更しようとしました。これに

this(new ImageIcon(FirstWindow.class.getResource(img)).getImage()); 

そして、このライン

BackgroundMainMenu panel = new BackgroundMainMenu(new ImageIcon("E:\\sources\\mainMenu.jpg").getImage()); 

BackgroundMainMenu panel = new BackgroundMainMenu(newImageIcon(FirstWindow.class.getResource("/stuff/images/mainMenu.jpg")).getImage()); 

何が間違っていますか? JPanelを使用して背景をペイントするより良い方法はありますか?

+0

'jar -tfv the.jar'の結果を表示してください –

答えて

1
BackgroundMainMenu(newImageIcon(FirstWindow.class.getResource("/stuff/images/mainMenu.jpg")).getImage()); 

リソース

にポイントのカップルをロードするための基本的な例Loading Images Using getResource上のSwingのチュートリアルからセクションを読む:

  1. は、あなたのクラスパスに実際に「もの」ディレクトリですか?
  2. 先頭の "/"は必要ですか?
+0

1.そうです。 2.私は "/"をつけずにまだ試してみませんでした。私はエラーを受け取ります: javax.swing.ImageIcon。 (不明なソース) もし助けになるなら –

+0

@JonathanP、コードはうまくいく。私はすべての私のクラスファイルが置かれているディレクターの子として "イメージ"サブディレクトリを持っています。私が間違ったファイル名を与えると、NullPointerExceptionが発生します。だから私は私のテストコードがあなたのものとどのように違うのか分からない。あなたが何を変えたか教えてください。あなたがテストした実際のコードを投稿してください。このコードにはmain()メソッドが含まれているので、コピー/貼り付け/テストを行うことができます。つまり、問題を示す適切な[mcve]を投稿します。 – camickr

+0

ありがとうございます!問題は私のプロジェクト内のパスに含める必要があったsrcフォルダによって引き起こされました。重複した質問を申し訳なく思っていますが、今削除します。 –

関連する問題