mrsw
mrsw

Reputation: 175

How to import image into JPanel

I am working on an assignment (GASP) and having issues with my image displaying. I am not looking for someone to complete my assignment for me but I desperately need some help figuring out why my code is not working properly. I have reviewed my Java Programming book as well as searched for the answers online to no avail so if someone could lead me in the right direction I would greatly appreciate it!! Here is my displayImage code:

import java.awt.Graphics;
import java.awt.Image;

import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class DisplayImage extends JFrame {
public void DislayImage(){
    add (new ImagePanel()); 
}

public static void main(String[] args) {
    JFrame frame = new DisplayImage (); 
    frame.setTitle("Go Bearcats!");
    frame.setSize(300, 300);
    frame.setLocationRelativeTo(null);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setVisible(true);
    Assignment02 a = new Assignment02();
    frame.add(a); 

}
}
class ImagePanel extends JPanel {
    public final static String LOC = "C:\\UCincinnatiLogo.jpg";
    private ImageIcon imageIcon = new ImageIcon (LOC); 
    private Image image = imageIcon.getImage(); 

    @Override /**Draw image on the panel*/
    protected void paintComponent(Graphics g){
        super.paintComponent(g);

        if (image !=null)
            g.drawImage(image, 200, 200, getWidth(), getHeight(), this); 
    }

 }

Upvotes: 2

Views: 1160

Answers (1)

Hovercraft Full Of Eels
Hovercraft Full Of Eels

Reputation: 285430

You're adding a component right on top of your image panel. The JFrame uses borderLayout, so anything added to it as you're doing will cover anything added previously.

JFrame frame = new DisplayImage (); 
frame.setTitle("Go Bearcats!");
frame.setSize(300, 300);
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
Assignment02 a = new Assignment02();
frame.add(a);  // here you add something on top of your imagePanel

Instead, make the ImagePanel the JFrame's contentPane via setContentPane(...), and then add things to the JFrame/contentPane, but be sure that they're not opaque.

public class DisplayImage extends JFrame {
public void DislayImage(){
    setContentPane(new ImagePanel()); 
}

and then,

Assignment02 a = new Assignment02();
a.setOpaque(false);  
frame.add(a);

Note, as an aside, I rarely create any classes that extend JFrame, and instead create my JFrame when needed. Instead I'd create my ImagePane and then add components directly to it before adding all to a JFrame.


Also you don't show us the Assignment02 class, but it had better have non-opaque JPanels and components.

Upvotes: 4

Related Questions