Here are two ways to add an image to a JPanel
using the NetBeans GUI editor. The class ImagePanel
below is created using the New JPanel Form
command.
Non-designer: The first approach modifies the constructor to set a background image, and the class overrides paintComponent()
to draw the image. No code inside the editor fold changes.
Designer: Using the GUI designer, the second approach adds a JLabel
named imageLabel
. The code to create the JLabel
with a centered Icon
goes in the property named Custom Creation Code
, while the following two lines go in the Post-Creation Code
.
package overflow;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Image;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
public class ImagePanel extends javax.swing.JPanel {
private Image image;
/** Creates new form ImagePanel */
public ImagePanel(Image image) {
this.image = image;
this.setPreferredSize(new Dimension(
image.getWidth(null), image.getHeight(null)));
initComponents();
}
@Override
protected void paintComponent(Graphics g) {
g.drawImage(image, 0, 0, null);
}
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
imageLabel = new JLabel(new ImageIcon("image2.jpg"), JLabel.CENTER);
imageLabel.setHorizontalTextPosition(JLabel.CENTER);
imageLabel.setVerticalTextPosition(JLabel.TOP);
setLayout(new java.awt.GridLayout());
imageLabel.setText("imageLabel");
add(imageLabel);
}// </editor-fold>
// Variables declaration - do not modify
private javax.swing.JLabel imageLabel;
// End of variables declaration
}
Here's a suitable Main
class and main()
method to display the panel:
package overflow;
import java.awt.EventQueue;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.JFrame;
public class Main {
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
JFrame f = new JFrame();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
try {
f.add(new ImagePanel(ImageIO.read(new File("image1.jpg"))));
} catch (IOException ex) {
ex.printStackTrace();
}
f.pack();
f.setVisible(true);
}
});
}
}