如何初始化多个paintComponents?

时间:2016-04-16 20:09:01

标签: java

我是java的新手,我需要制作游戏。

我遇到的问题并且试图解决过去两小时的问题,如何使用Jpanel和paintComponent在两个不同的类中绘制图像。我似乎无法使其发挥作用。

这是我的第二堂课的代码

public class Background extends JPanel {

    private BufferedImage image;

    public Background() {

        try {
            image = ImageIO.read(getClass().getResourceAsStream("/test_bg.png"));
        } catch (Exception e) {
            System.out.println("Error loading background image");
        }
        repaint();

    }

    @Override
    public void paintComponent(Graphics g) {

        Graphics2D g2d = (Graphics2D) g;
        super.paintComponent(g);
        g2d.drawImage(image, 0, 0, null);
        g2d.fillRect(100, 100, 100, 100);
    }

}

这与我的关卡课程几乎完全相同,但这不会出现在屏幕上。由于不值得一提的原因,我需要将它作为一个单独的类。

感谢。

1 个答案:

答案 0 :(得分:-1)

此处的代码有效,JPanel上会出现一个黑色矩形。

我怀疑你正在添加其他JPanels。

import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;

import javax.imageio.ImageIO;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class Background extends JPanel {

    public static void main(String[] args) {
        JFrame f = new JFrame();
        f.getContentPane().add(new Background());
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setSize(800, 600);
        f.setVisible(true);
    }

    private BufferedImage image;

    public Background() {

        try {
            image = ImageIO.read(getClass().getResourceAsStream("/test_bg.png"));
        } catch (Exception e) {
            System.out.println("Error loading background image");
        }
        repaint();

    }

    @Override
    public void paintComponent(Graphics g) {

        Graphics2D g2d = (Graphics2D) g;
        super.paintComponent(g);
        g2d.drawImage(image, 0, 0, null);
        g2d.fillRect(100, 100, 100, 100);
    }

}