EternalChronicle
EternalChronicle

Reputation: 31

How to open an image using Imageicon on a jframe

I am trying to simply draw an image on a jframe by using an Imageicon. However when I run it its just blank. Heres my code...

    public final class PICS

{

  public static final void main(String... aArgs)
  {   
      JFrame frame = new JFrame("IMAGE");
      frame.setVisible(true);
      frame.setSize(500,500);
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      ImageIcon image = new ImageIcon("image/pic1.jpg");
      JLabel label = new JLabel("", image, JLabel.CENTER);
      JPanel panel = new JPanel(new BorderLayout());
      panel.add( label, BorderLayout.CENTER );
  } 
}

I am very new to everything java including this website, so I apologize if im missing something. Also im using Eclipse, and are there specific formats you can use for images, or is there a limit to size?

Upvotes: 3

Views: 3954

Answers (2)

MadProgrammer
MadProgrammer

Reputation: 347314

Two things.

First, make setVisible the last call AFTER you have built your frame and it's contents...ie

JFrame frame = new JFrame("IMAGE");
frame.setSize(500,500);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
ImageIcon image = new ImageIcon("image/pic1.jpg");
JLabel label = new JLabel("", image, JLabel.CENTER);
JPanel panel = new JPanel(new BorderLayout());
panel.add( label, BorderLayout.CENTER );
// Make me last
frame.setVisible(true);

Two, make sure that the image/pic1.jpg exists and is the directory image under the current execution context.

If the image is a embedded resource (lives within the Jar or your application), then you need to supply a URL to the image instead of a String as ImageIcon treats String as a file name...

ImageIcon image = new ImageIcon(PICS.class.getResource("image/pic1.jpg"));

For example.

I would encourage you to use JFrame#pack over JFrame#setSize as it will resize the frame to the preferred size of your content...

I would also encourage you to take the time to read through Code Conventions for the Java Programming Language, Initial Threads.

I would also encourage you to use ImageIO over ImageIcon as it will, at least, throw an Exception if something goes wrong

Updated, testing image path

Try adding this to the constructor of your PICS class. This will, at least, tell you where the image isn't...

try {
    ImageIO.read(PICS.class.getResource("image/pic1.jpg"));
} catch (IOException ex) {
System.out.println("Not in image/pic1.jpg");
}
try {
    ImageIO.read(PICS.class.getResource("/image/pic1.jpg"));
} catch (IOException ex) {
System.out.println("Not in /image/pic1.jpg");
}
try {
    ImageIO.read(PICS.class.getResource("resources/image/pic1.jpg"));
} catch (IOException ex) {
System.out.println("Not in resources/image/pic1.jpg");
}
try {
    ImageIO.read(PICS.class.getResource("/resources/image/pic1.jpg"));
} catch (IOException ex) {
System.out.println("Not in /resources/image/pic1.jpg");
}

Upvotes: 2

camickr
camickr

Reputation: 324157

I am very new to everything java including this website

Then I would suggest you start by reading tutorials especially the Swing tutorial. Maybe the section on How to Use Icons would be a good place to start. The example code will show you how to use Icons as well as how to structure your program so that the GUI code is executed on the EDT. The tutorial on Concurrency will explain why the EDT is important.

Upvotes: 2

Related Questions