在Java中显示图形的问题

Mar*_*tin 0 java graphics swing

我正在用Java编写模拟,但是没有很多使用Graphics对象的经验.我写了一堂课

public class RoadNetwork extends JPanel {
    BufferedImage truck1;

    public RoadNetwork() throws IOException{
        truck1 = ImageIO.read(getClass().getResource("Truck.png"));
    }

    protected void paintcomponent (Graphics g) {
        super.paintComponent(g);
        g.drawImage(car1, 0, 0, 100, 100, this);
    }
}
Run Code Online (Sandbox Code Playgroud)

在我的main函数中,我按如下方式初始化类:

JFrame F1 = new JFrame();
F1.setLayout(new GridBagLayout());
GridBagConstraints constraints = new GridBagConstraints();
F1.setSize(1280,760);
RoadNetwork roadnetwork = new RoadNetwork();
roadnetwork.setPreferredSize(new Dimension(500,500));
roadnetwork.setVisible(true);
constraints.gridx = 40;
constraints.gridy = 40;
F1.add(roadnetwork, constraints);
F1.setVisible(true);
Run Code Online (Sandbox Code Playgroud)

但是,我只得到一个灰色的框架作为输出,没有图像.我已经通过将图像作为单独的ImageIcon添加到框架中来测试图像,这是有效的.但是,我似乎无法在框架中显示RoadNetwork类.我应该以某种方式调用paintcomponent函数吗?我究竟做错了什么?

Mar*_*rry 5

从你的代码中,你有一个错误的方法.

protected void paintcomponent (Graphics g) {
Run Code Online (Sandbox Code Playgroud)

不要求油漆.

protected void paintComponent (Graphics g) {
Run Code Online (Sandbox Code Playgroud)

是方法的正确名称,它将覆盖父项一个,而这个名称由JVM调用.

  • 当你想要覆盖一个方法时,添加一个@Override注释.这样,如果再次输入拼写错误,编译器将检测它并抛出错误,因为该方法不会重新覆盖任何内容. (2认同)