Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何初始化多个组件?_Java - Fatal编程技术网

Java 如何初始化多个组件?

Java 如何初始化多个组件?,java,Java,我是java新手,需要制作一个游戏 在过去的两个小时里,我遇到并试图解决的问题是如何在两个不同的类中使用Jpanel和paintComponent绘制图像。我似乎无法让它工作 这是我第二节课的代码 public class Background extends JPanel { private BufferedImage image; public Background() { try { image = ImageIO.read(g

我是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);
    }

}
这和我的等级课差不多,但屏幕上没有显示。由于不值得一提的原因,我需要将其作为一个单独的类


谢谢

您的代码在这里运行,JPanel上会出现一个黑色矩形

我怀疑你在这个上面添加了其他JPanel

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);
    }

}

如果图像存在,此代码看起来很好。问题可能来自其他地方。请确保您正在将背景添加到JFrame中,并且它不在其他框架下。karl,我该怎么做?使用布局。frame.getContentPane().addComponent(mypanel,BorderLayout.WEST);然后在另一个面板上加上EAST。你在说什么??“你的解决方案有效”??这是一个答案吗?是的,这就是我要问的,我怎么能有两个,我知道它应该单独工作