我是Java新手,目前正在创建带有图形的游戏。我有从扩展的此类JFrame。在本课程中,我有很多JPanel需要图像作为背景的。据我所知,为了能够在JPanel中绘制图像,我需要从JPanel扩展一个单独的类,并且该类的paintComponent方法可以完成工作。但是我不想为每个类创建单独的类JPanel,我的类太多了。而且我只关心背景。我怎样才能做到这一点?带有匿名内部类吗?怎么样?
JFrame
JPanel
paintComponent
为了更好地理解,我提供了一些代码:
public GUI extends JFrame { private JPanel x; ... public GUI() { x = new JPanel(); // put an image background to x }
为什么不制作一个包含Image??的类?
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(); } }
您甚至可以提供有关应在何处绘画的提示。
这样,您可以在需要时仅创建一个实例
更新
另一个问题是,为什么?
您可以只使用a即可JLabel为您绘制图标,而无需进行任何其他工作。
JLabel
有关更多详细信息,请参见如何使用标签。
这实际上是一个坏主意,因为JLabel在计算首选大小时不使用其子组件,在确定首选大小时仅使用图像的大小和文本属性,这可能导致组件的大小设置错误