将一个背景图像添加到面板

我有一个JPanel ,我想添加一个图像作为它的背景。 我怎样才能做到这一点 ?

 frame = new JFrame("Some frame"); panel1 = new JPanel(); panel1.setBorder(new EmptyBorder(5, 5, 5, 5)); // NEED TO ADD AN IMAGE TO THIS PANEL panel1.setLayout(cardlayout); frame.getContentPane().add(panel1); frame.setLocationByPlatform(true); frame.setVisible(true); 

我需要添加一个图像的panel ,我怎么能做到这一点?

更新1

  panel1 = new JPanel() { private static final long serialVersionUID = 1L; @Override public void paintComponent(Graphics g) { g.drawImage(Toolkit.getDefaultToolkit().createImage("1.jpg"), 0, 0, null); } }; 

您需要重写paintComponent(Graphics g) ,并在Graphics对象g上使用drawImage() ,如本例所示 。


另外,请通过@trashgod检查这两个示例:

  1. 例如 。
  2. 例如 。

你有一个资源位置问题。

Toolkit#createImage可能会返回一个空的图像,如果找不到资源。

我build议你改用ImageIO API,它支持更多的图像格式,但是如果图像没有find或者无法加载,也会抛出exception。

如何加载图像也取决于图像的位置。

如果图像存在于文件系统中,则只需使用File对象引用即可,如果图像是embedded式资源(在您的应用程序中),则需要使用Class#getResource获取该URL

在这里输入图像描述

 public class TestGraphics { public static void main(String[] args) { new TestGraphics(); } public TestGraphics() { EventQueue.invokeLater(new Runnable() { @Override public void run() { try { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) { } JFrame frame = new JFrame(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setContentPane(new PaintTest()); frame.pack(); frame.setLocationRelativeTo(null); frame.setVisible(true); } }); } public class PaintTest extends JPanel { private BufferedImage image; public PaintTest() { setLayout(new BorderLayout()); try { // Use this if the image exists within the file system image = ImageIO.read(new File("/path/to/image/imageName.png")); // Use this if the image is an embedded resource // image = ImageIO.read(getClass().getResource("/path/to/resource/imageName.png")); } catch (Exception e) { e.printStackTrace(); } } @Override public Dimension getPreferredSize() { return image == null ? super.getPreferredSize() : new Dimension (image.getWidth(), image.getHeight()); } @Override protected void paintComponent(Graphics g) { super.paintComponent(g); if (image != null) { int x = (getWidth() - image.getWidth()) / 2; int y = (getHeight()- image.getHeight()) / 2; g.drawImage(image, x, y, this); } } } }