Java:如何在画布中绘图?

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

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

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

休息很好.希望它能帮助你进步.

上一篇:鼠标移动时java绘制线条


下一篇:sharding-jdbc实现读写分离