2014-05-03 27 views
1

我用一個類Imagepanel在netbeans中顯示一個背景圖片給我的面板。它從IDE netbeans 6.8運行它時成功工作,但是當我從jar中運行它時文件它不顯示圖像。請幫我解決這個問題。謝謝你的評論。 這裏是我的代碼ImagePanel.javaImagePanel沒有在我的jar文件中顯示netbeans

import java.awt.Dimension; 
    import java.awt.Graphics; 
    import java.awt.Image; 
    import javax.swing.ImageIcon; 
    import javax.swing.JPanel; 



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(this.getMaximumSize()); 
    setMinimumSize(size); 
    setMaximumSize(size); 
    setSize(this.getMaximumSize()); 
    setLayout(null); 
    } 

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

} 

我已經創建了我的板是在這樣的另一個類,其中我的形象是在src目錄中的圖像。提前致謝 。

ImagePanel pan2 = new ImagePanel("src/images/tarif.png"); 
+0

1)通過部署時,這些資源可能會成爲一個[標籤:嵌入式的資源。在這種情況下,資源必須通過'URL'而不是'File'訪問。查看標籤的[info page](http://stackoverflow.com/tags/embedded-resource/info),以獲得一個「URL」。 2)'g.drawImage(img,0,0,null);'應該是'g.drawImage(img,0,0,this);'3)'public void paintComponent(Graphics g){'should be'public void paintComponent(Graphics g){super.paingComponent(g);' –

+1

@Andrew Thompson感謝您的迴應我更新了我的代碼,因爲您告訴我並且它對我有用:) – Emna

回答

1
import java.awt.*; 
import javax.swing.*; 

class BackgroundPanel extends JPanel 
{ 
Image image; 
public BackgroundPanel(String path) 
{ 
try 
{ 
image = (new ImageIcon(getClass().getResource(path))).getImage(); 
} 
catch(Exception e){/*handled in paintComponent()*/} 
} 
    @Override 
public void paintComponent(Graphics g) 
{ 
super.paintComponent(g); 
    g.drawImage(image, 0, 0, this); 
} 
} 

這段代碼工作,我調用類的這樣

String path ="/images/tarif.png"; 
JPanel pan2=new BackgroundPanel(path); 
+0

很高興您對它進行了排序。感謝您回報。 :) –