2
我是新来的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)
我在做什么错?有没有更好的方法来绘制这些正方形?
谢谢!
Canvas是一个AWT组件。你应该使用JPanel来代替 – ControlAltDel
1)'Graphics g = canvas.getGraphics();'另外,这几乎每天都会出现,就像不建议在Swing GUI中使用AWT组件一样。几乎所有可以在'Canvas'中完成的任何事情都可以在'JPanel'中完成(并且更好)。 2)'f.setVisible(true);'应该在添加所有组件后完成。 –
“Canvas是一个AWT组件。您应该使用JPanel来代替”:why? – gpasch