1

我是 Java 新手,目前正在创建一个带有图形的游戏。我有这个类从JFrame. 在这堂课中,我有很多JPanel需要图像作为背景的s。据我所知,为了能够在 JPanel 中绘制图像,我需要有一个从 JPanel 扩展而来的单独类,并且该类的paintComponent方法将完成这项工作。但是我不想为每个单独的类JPanel,我有太多的类;而且我只关心背景。我怎样才能做到这一点?是匿名内部类吗?如何?

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

public GUI extends JFrame {
  private JPanel x;
  ...  

  public GUI() {
   x = new JPanel();
   // put an image background to x
  }
4

3 回答 3

3

您不必为此另开一堂课吗?你可以这样做:

x = new JPanel(){
    public void paintComponent(Graphics g){
        super.paintComponent(g);
        //draw background image
    }
};
于 2013-08-23T03:02:09.510 回答
3

为什么不制作一个需要 ? 的课程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();
    }
}

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

这样,您可以在需要时简单地创建一个实例

更新

另一个问题是,为什么?

您可以只使用 aJLabel为您绘制图标,而无需任何额外的工作......

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

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

于 2013-08-23T03:08:01.813 回答
1

您可以在单行中执行此操作:

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

我希望它对你有用。

于 2013-08-23T04:10:10.897 回答