2016-06-10 115 views
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) 

我在做什麼錯?有沒有更好的方法來繪製這些正方形?

謝謝!

+1

Canvas是一個AWT組件。你應該使用JPanel來代替 – ControlAltDel

+1

1)'Graphics g = canvas.getGraphics();'另外,這幾乎每天都會出現,就像不建議在Swing GUI中使用AWT組件一樣。幾乎所有可以在'Canvas'中完成的任何事情都可以在'JPanel'中完成(並且更好)。 2)'f.setVisible(true);'應該在添加所有組件後完成。 –

+0

「Canvas是一個AWT組件。您應該使用JPanel來代替」:why? – gpasch

回答

3

評論這兩行

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

並改變塗料的方法如下。

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

休息一切都好。希望它能幫助你進步。