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);
休息就好。希望对你的进步有所帮助。
我是 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);
休息就好。希望对你的进步有所帮助。