2013-01-22 87 views
0

我想在面板內顯示圖像。所以我將圖像的路徑傳遞給此方法,打開圖像文件並將其傳遞給專用於在面板內繪製圖像的私有類的方法。問題是面板始終是空的,並沒有顯示任何東西。圖像沒有顯示在JPanel中

下面是代碼:

JPanel ImagePane; // I want to add image to this 

public void getImagePath(String Path) 
{  
    BufferedImage image = null; 

    try 
    { 
     image=ImageIO.read(new File(Path)); 
    } 
    catch (IOException e) 
    { 
     e.printStackTrace(); 
    } 
    DisplayImage display= new DisplayImage(); 
    display.getImage(image); 
} 

private class DisplayImage extends JPanel 
{ 
    private BufferedImage image=null; 

    public void getImage(BufferedImage im) 
    { 
     image=im; 
     repaint(); 
    } 

    public void paintComponents(Graphics g) 
    { 
     g.drawImage(image, 0, 0, image.getWidth() /2, image.getHeight()/2,ImagePane); 
    } 
} 

我缺少什麼?

回答

5

paintComponents是用於繪製容器中每個組件的Container的一種方法。相反,您需要paintComponent來繪製這個單一組件。

public void paintComponents(Graphics g) 

方法更改爲

@Override 
public void paintComponent(Graphics g) { 
    super.paintComponent(g); 
    g.drawImage(image, 0, 0, image.getWidth() /2, image.getHeight()/2,ImagePane); 
} 

注意使用@Override註釋的幫助方法簽名檢查。

還呼籲

super.paintComponent(g); 

將更新的子組件。


在你的方法getImagePath你不要出現在DisplayImage添加到任何容器。而是創建一個本地DisplayImage,但不要使用它。

+0

還沒有什麼是displyed –

+0

可能是一個大小問題。 「DisplayImage」的父容器的佈局是什麼? – Reimeus

+0

它是組佈局。 –

3

您必須覆蓋paintComponent

protected void paintComponent(Graphics g) 

但在你的代碼中創建public void paintComponents(Graphics g)這是不正確

+0

1.4.2文檔?請鏈接到當前的(Java 7)文檔。 –

+0

是的謝謝:)完成 –

2

有使用@Override註解。如果您習慣在重寫某個方法時使用它,則可以在編譯時解決此問題。你需要使用這個:

@Override 
    public void paintComponent(Graphics g)