Java:如何在画布上绘制?

Ron*_*man 3 java swing canvas awt

我是Java的新手,我想做一个简单的游戏,在一个简单的网格中有一个正方形(介于蛇和迷宫之间)。方块数不会改变,只有它们的颜色会改变。

我已经编写了游戏所需的对象。现在,我要展示游戏。

我知道如何创建所需的JFrame,JPanel和JButton,但是我不知道如何在画布上绘制。

我做了一个测试课:

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

当我运行此窗口时,将创建一个具有正确标题,大小和按钮的窗口,但是没有其他内容(没有绿色背景,没有红色或蓝色矩形),并且检测到错误:

Exception in thread "main" java.lang.NullPointerException
    at Test.paint(Test.java:25)
    at Test.main(Test.java:15)
Run Code Online (Sandbox Code Playgroud)

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

谢谢 !

Ben*_*ndo 5

评论这两行

 //Graphics g=canvas.getGraphics();
 //canvas.paint(g);
Run Code Online (Sandbox Code Playgroud)

并按以下方式更改绘制方法。

 @Override
 public void paint(Graphics g) {
     super.paint(g);
Run Code Online (Sandbox Code Playgroud)

休息就好了 希望它能帮助您进步。