2012-04-10 57 views
3

我想在JPanel上顯示圖像。我使用ImageIcon來渲染圖像,並且該圖像與類文件位於同一目錄中。但是,圖像沒有被顯示,並且沒有發生錯誤。任何人都可以請工作了協助有什麼錯我的代碼...顯示ImageIcon

package ev; 

import java.awt.Graphics; 
import javax.swing.ImageIcon; 
import javax.swing.JPanel; 

public class Image extends JPanel { 

    ImageIcon image = new ImageIcon("peanut.jpg"); 
    int x = 10; 
    int y = 10; 

    public void paintComponent(Graphics g) { 
     super.paintComponent(g); 
     image.paintIcon(this, g, x, y); 
    } 
} 

回答

2

您應該使用

ImageIcon image = new ImageIcon(this.getClass() 
       .getResource("org/myproject/mypackage/peanut.jpg")); 
+0

對不起,是一個錯字 使用getClass()。getResource(path) – 2012-04-10 14:07:50

4

這是程序員之間的共同困惑。 getClass().getResource(path)從類路徑加載資源。

ImageIcon image = new ImageIcon("peanut.jpg");

如果我們只提供圖像文件的名稱,然後Java是 在當前工作目錄下尋找它。 如果您使用的是NetBeans,則CWD是項目目錄。您 可以在運行時找出CWD與以下電話:

System.out.println(new File("").getAbsolutePath());

下面是一個代碼示例,在那裏你可以測試自己這一點。

package com.zetcode; 

import java.awt.Dimension; 
import java.awt.Graphics; 
import java.io.File; 
import javax.swing.ImageIcon; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.SwingUtilities; 

class DrawingPanel extends JPanel { 

    private ImageIcon icon; 

    public DrawingPanel() { 

     loadImage(); 
     int w = icon.getIconWidth(); 
     int h = icon.getIconHeight(); 
     setPreferredSize(new Dimension(w, h)); 

    } 

    private void loadImage() { 

     icon = new ImageIcon("book.jpg"); 
    } 

    @Override 
    public void paintComponent(Graphics g) { 
     super.paintComponent(g); 

     icon.paintIcon(this, g, 0, 0); 
    } 

} 

public class ImageIconExample extends JFrame { 

    public ImageIconExample() { 

     initUI(); 
    } 

    private void initUI() { 

     DrawingPanel dpnl = new DrawingPanel(); 
     add(dpnl); 

     // System.out.println(new File("").getAbsolutePath());   

     pack(); 
     setTitle("Image"); 
     setLocationRelativeTo(null); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);   
    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 

      @Override 
      public void run() {     
       JFrame ex = new ImageIconExample(); 
       ex.setVisible(true);     
      } 
     }); 
    } 
} 

下圖爲放在哪裏book.jpg 圖像在NetBeans中,如果我們只提供圖像名稱 到ImageIcon構造。

Location of the image in NetBeans project

我們有命令行相同的程序。我們在ImageIconExample 目錄中。

 
$ pwd 
/home/vronskij/prog/swing/ImageIconExample 

$ tree 
. 
├── book.jpg 
└── com 
    └── zetcode 
     ├── DrawingPanel.class 
     ├── ImageIconExample$1.class 
     ├── ImageIconExample.class 
     └── ImageIconExample.java 

2 directories, 5 files 

程序運行使用下面的命令:

$ ~/bin/jdk1.7.0_45/bin/java com.zetcode.ImageIconExample

你可以找到更多我Displaying image in Java教程。