将图像作为JPanel的背景

我是Java新手,目前正在用graphics创build一个游戏。 我有这个类从JFrame延伸。 在这个类中,我有许多JPanel需要一个图像作为背景。 据我所知,为了能够在JPanel中绘制图像,我需要一个从JPanel扩展而来的单独的类,并且该类的paintComponent方法将完成这项工作。 但是我不想为每个JPanel单独做一个类,我有太多它们; 事实上我只关心背景。 我该怎么做? 它是与一个匿名的内部类? 怎么样?

为了更好的理解我提供了一些代码:

 public GUI extends JFrame { private JPanel x; ... public GUI() { x = new JPanel(); // put an image background to x } 

为什么不制作一个需要Image类?

 public class ImagePane extends JPanel { private Image image; public ImagePane(Image image) { this.image = image; } @Override public Dimension getPreferredSize() { return image == null ? new Dimension(0, 0) : new Dimension(image.getWidth(this), image.getHeight(this)); } @Override protected void paintComponent(Graphics g) { super.paintComponent(g); Graphics2D g2d = (Graphics2D) g.create(); g2d.drawImage(image, 0, 0, this); g2d.dispose(); } } 

你甚至会提供关于应该在哪里绘画的提示。

这样,你可以简单地创build一个实例,当你需要它

更新

另一个问题是,为什么?

你可以使用一个JLabel ,它将为你绘制图标,而不需要额外的工作。

有关详细信息,请参阅如何使用标签 …

这实际上是一个坏主意,因为JLabel在计算首选大小时不使用它的子组件,它只在确定首选大小时使用图像的大小和文本属性,这可能会导致组件大小错误

你不需要再上课了吗? 你可以做:

 x = new JPanel(){ public void paintComponent(Graphics g){ super.paintComponent(g); //draw background image } }; 

你可以在单行中做到这一点:

panelInstance.add(new JLabel(new ImageIcon(ImageIO.read(new File("Image URL")))));

我希望它会为你工作。