将图像作为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")))));
我希望它会为你工作。