Java: 如何绘制canvas?

Java: How to draw in a canvas?

我是 Java 的新手,我想制作一个简单的游戏,其中在一个简单的网格中有方块(介于蛇和迷宫之间)。方块的数量没有变化,只是颜色变了。

我已经编写了游戏所需的 objects。现在我要显示游戏。

我知道如何创建我需要的 JFrame、JPanel 和 JButton,但我不明白如何在 canvas 中绘制。

我做了一个测试class:

import javax.swing.*;
import java.awt.*;

public class Test extends Canvas {
    public static void main (String[] arg) {
        JFrame f=new JFrame();
        f.setTitle("Title");
        f.setSize(400,500);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setVisible(true);
        JPanel pan=new JPanel(new FlowLayout());
        pan.add(new JButton("hey"));
        Test canvas=new Test();
        Graphics g=canvas.getGraphics();
        canvas.paint(g);
        pan.add(canvas);
        f.setContentPane(pan);
    }

    public Test() {
        setBackground (Color.green);
        setSize(300,300);
        setVisible(true);
    }

    public void paint(Graphics g) {
        Color c = g.getColor();
        g.setColor(Color.RED);
        g.fillRect(10,10,80,80);
        g.setColor(Color.BLUE);
        g.fillRect(150,50,80,80);
        g.setColor(c);
    }
}

当我 运行 这样做时,会创建一个 windows,具有正确的标题、大小和按钮,但没有任何其他内容(没有绿色背景,没有红色或蓝色矩形) ,并检测到错误:

Exception in thread "main" java.lang.NullPointerException
    at Test.paint(Test.java:25)
    at Test.main(Test.java:15)

我做错了什么?有没有更好的方法来绘制这些正方形?

谢谢!

注释这两行

 //Graphics g=canvas.getGraphics();
 //canvas.paint(g);

并改变绘画方法如下。

 @Override
 public void paint(Graphics g) {
     super.paint(g);

休息就好。希望对你的进步有所帮助。