2014-01-13 42 views
1

我在java中創建一個簡單的應用程序,該應用程序在JFrame上顯示JPEG圖像。 我創建了一個類MyPanel延伸JPanel並推翻了的paintComponent()方法:我的java graphics.drawImage()不顯示傳遞給它的圖像

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

public class MyPanel extends JPanel { 

    public void paintComponent(Graphics graphics) 
    { 
     Image image = new ImageIcon("ax.jpeg").getImage(); 

     graphics.drawImage(image, 1, 1, this); 
    } 
} 

然後,我添加新創建的面板,我的JFrame,我主要的應用程序類:

import javax.swing.*; 

public class MyGraphicalApp { 

    public JFrame jFrame = new JFrame(); 
    public MyPanel myPanel = new MyPanel(); 

    public static void main(String[] args) { 
     MyGraphicalApp myGraphicalApp = new MyGraphicalApp(); 
     myGraphicalApp.go(); 
    } 

    public void go() 
    { 
     jFrame.getContentPane().add(myPanel); 

     jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     jFrame.setSize(300,300); 
     jFrame.setVisible(true); 
    } 
} 

問題是它根本不顯示圖像。我的圖片駐留在我的源文件中:

src 
    ------- ax.jpeg 
    | 
    ------- MyGraphicalApp.java 
    | 
    ------- MyPanel.java 

感謝您的幫助。

+1

是否確定要在每次渲染應用程序時重新加載圖像? – Thomas

回答

3

確保將圖像文件所在的目錄添加到類路徑中。然後在你的類構造函數中加載圖像,如下所示:

protected BufferedImage image; 

public MyPanel() throws IOException { 
    URL imageURL = getClass().getResource("/ax.jpeg"); 
    if (imageURL == null) { 
     throw new FileNotFoundException(); 
    } 
    this.image = ImageIO.read(imageURL); 
} 
+0

+1以這種方式,您將防止組件大小調整時重新加載圖像。還可以考慮在'paintComponent()'實現的開頭提到缺少'super.paintComponent(g);'。 – dic19

+0

@ dic19你並不需要調用'super.paintComponent(g)'。 API文檔列出了一些合同,但如果您選擇不這樣做。 – Thomas