2017-05-16 20 views
1

イメージをファイルパスで表示しようとしています。 srcフォルダにイメージがあり、5種類のコードを試しました。ファイルパスを使用してイメージを描画する方法

はコメントアウトコードを無視し、それらはちょうど私が

をテストするために描いていた私が働いているファイルのパスとファイル名と何の両方でそれを試してみた形状されています。それは私に何かエラーや何も与えていない。ここで

public void ImagePanel() { 
    try { 
     image = ImageIO.read(new File("BMan.jpg")); 
    } catch (IOException ex) { 
     System.out.println(ex); 
    } 
} 

public static void main(String[] args) { 
    JPanel panel = new MyPanel(); 
} 
protected void paintComponent(Graphics g){ 

    super.paintComponent(g); 
    //g.setColor(Color.RED); 
    //g.fillOval(CircleX, CircleY, CircleH, CircleW); 
    //g.setColor(Color.GREEN); 
    //g.fillRect(SquareX, SquareY, SquareW, SquareH); 
    g.drawImage(image, 50, 50, this); 

} 
+0

は 'ex.printStackTrace(使用して再試行してください) 'あなたの' catch'では、代わりに。それはもっと情報を与えるかもしれません...また、そこにはJFrameがありますか?それとも、JPanelだけがそこにありますか? – ItamarG3

答えて

0

コンポーネントの私の実装です:

public class ImageView extends JComponent 
     implements ComponentListener { 
    private static final long serialVersionUID = 3761966077344495154L; 

    private BufferedImage image; 
    private int imageX; 
    private int imageY; 
    private int imageWidth; 
    private int imageHeight; 

    /** Creates a new instance of ImageView */ 
    public ImageView() { 
     addComponentListener(this); 
    } 


    public BufferedImage getImage() { 
     return image; 
    } 

    public Rectangle getImageBounds() { 
     if (image == null) { 
      return null; 
     } else { 
      return new Rectangle(imageX, imageY, imageWidth, imageHeight); 
     } 
    } 

    public void setImage(final BufferedImage newValue) { 
     image = newValue; 
     computeBounds(); 
     repaint(); 
    } 


    @Override 
    public void paint(Graphics g) { 
     long tm = System.currentTimeMillis(); 
     if (isOpaque()) { 
      g.setColor(getBackground()); 
      g.fillRect(0, 0, getWidth(), getHeight()); 
     } 

     BufferedImage img = image; 
     if (img != null) { 
      g.drawImage(img, imageX, imageY, imageWidth, imageHeight, null); 
     } 
     tm = System.currentTimeMillis()-tm; 
    } 

    public void componentResized(ComponentEvent e) { 
     computeBounds(); 
    } 

    public void componentMoved(ComponentEvent e) { 
    } 

    public void componentShown(ComponentEvent e) { 
     computeBounds(); 
    } 

    public void componentHidden(ComponentEvent e) { 
    } 

    private void computeBounds() { 
     BufferedImage img = image; 
     if (img != null) { 
      int width = this.getWidth(); 
      int height = this.getHeight(); 
      int wi = img.getWidth(); 
      int hi = img.getHeight(); 
      imageWidth = width; 
      imageHeight = height; 
      imageX = 0; 
      imageY = 0; 
      if (wi*height < hi*width) { 
       imageWidth = wi*height/hi; 
       imageX = (width-imageWidth)/2; 
      } else { 
       imageHeight = hi*width/wi; 
       imageY = (height-imageHeight)/2; 
      } 
     } 
    } 
0

あなたがパネルを置くJFrameを作成する必要があります。

public static void main(String[] args) { 
    JFrame frame = new JFrame("title"); 
    frame.setSize(400,400); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    //all the other things for the jframe 
    JPanel panel = new MyPanel(); 
    frame.add(panel); 
    frame.setVisible(true); 
    frame.repaint(); 
} 
関連する問題