I am trying to display an image on a JPanel
. I'm using an ImageIcon
for rendering the image, and the image is in the same directory as the class file. However, the image is not being displayed, and there are no errors occuring. Could anyone please assist in working out what's wrong with my code...
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);
}
}
This is a common confusion among programmers. The
getClass().getResource(path)
loads resources from the classpath.ImageIcon image = new ImageIcon("peanut.jpg");
If we only provide the name of the image file then Java is looking for it in the current working directory. If you are using NetBeans, the CWD is the project directory. You can figure out the CWD at runtime with the following call:
System.out.println(new File("").getAbsolutePath());
The following is a code example, where you can test this for yourself.
The following picture shows where to put the book.jpg image in NetBeans if we only provide the image name to the
ImageIcon
constructor.We have the same program from the command line. We are inside the ImageIconExample directory.
The program is run with the following command:
$ ~/bin/jdk1.7.0_45/bin/java com.zetcode.ImageIconExample
You can find out more at my Displaying image in Java tutorial.
You should use