Java:如何在画布中绘图?

时间:2016-06-10 17:51:07

标签: 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);
    }
}

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

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

我做错了什么?是否有更好的方法来绘制这些方块?

谢谢!

1 个答案:

答案 0 :(得分:5)

评论这两行

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

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

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

休息一切都很好。希望它能帮助你进步。