2017-02-22 61 views
0

我試圖顯示的圖像沒有正確顯示。我使用ImageIO來閱讀,然後繪製它。無法解析圖像不顯示問題

import javax.imageio.ImageIO; 
import javax.swing.*; 
import java.awt.*; 
import java.awt.image.BufferedImage; 
import java.io.File; 
import java.io.IOException; 

public class imagestukje extends JPanel { 

    private BufferedImage image; 

    public imagestukje() { 
     try { 
      image = ImageIO.read(new File("images/lingo.jpg")); 
     } catch (IOException e) { 

     } 
    } 

    @Override 
    protected void paintComponent(Graphics g) { 
     super.paintComponent(g); 
     g.drawImage(image, 0, 0, this); 
    } 
} 

爲什麼不顯示圖像?

+3

不要留下空'catch'條款!你不知道你是否成功閱讀了圖像。至少把'e.printStackTrace()'放在那裏。 – RealSkeptic

+2

我懷疑ImageIO.read失敗了,但是沒有辦法說明,因爲你的catch子句中沒有任何東西可以說明這一點。 – Legatro

+1

根據您的示例,映射存儲在與執行代碼的位置相關的位置,應該在工作目錄 – MadProgrammer

回答

-1

嗨,你應該使用搜索之前,你問一個已經解決了的問題。

try this:

-1

在那裏,你可以有兩個問題:沒有定義面板的

  • 大小
  • 面板沒有粉刷

完全可以提高面板具有以下內容:

public class ImagePanel extends JPanel { 
    BufferedImage image; 
    Dimension size = new Dimension(); 

    public ImagePanel() { 
    } 

    public ImagePanel(BufferedImage image) { 
     this.image = image; 
     this.size.setSize(image.getWidth(), image.getHeight()); 
    } 

    public void setImage(BufferedImage image) { 
     this.image = image; 
     this.size.setSize(image.getWidth(), image.getHeight()); 
    } 

    @Override 
    protected void paintComponent(Graphics g) { 
     if(this.image != null) { 
      g.drawImage(this.image, x, y, this); 
     } 

    } 

    @Override 
    public Dimension getPreferredSize() { 
     return this.size; 
    } 
} 

所以在配置界面之後,你可以初始化任何圖像該面板像以下:

try { 
    image = ImageIO.read(new File("images/lingo.jpg")); 
    ((ImagePanel) jPanel).setImage(image); 

    jPanel.invalidate(); 
    jPanel.repaint(); 
} catch (IOException e) { 

}