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