2017-02-22 19 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 не работает, но нет никакого способа сказать, потому что в вашем уловке нет ничего, чтобы прояснить это. – 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) { 

}