2015-09-18 17 views
0

我在面板上繪製一些東西,比用戶按下按鈕時想移動它或在其上繪製東西。在這個例子中,按鈕被稱爲低,做的情況下,當它被按下會是這樣的:如何在主函數之外使用Graphics2D?

private static void lowerIt(){  

    g2d.setColor(Color.black); 
    g2d.fillRect(284, 436, 22, 42); 
    g2d.setColor(Color.black); 
    g2d.fillRect(284, 537, 22, 42); 

    g2d.setColor(Color.blue); 
    g2d.fillRect(284, 437, 22, 40); 
    g2d.setColor(Color.BLUE); 
    g2d.fillRect(284, 538, 22, 40); 
} 

的問題是,該方法需要得到G2D,但如果我再這樣做像這:

private static void lowerIt(Graphics g){ 
    Graphics2D g2d = (Graphics2D) g; 

    g2d.setColor(Color.black); 
    g2d.fillRect(284, 436, 22, 42); 
    g2d.setColor(Color.black); 
    g2d.fillRect(284, 537, 22, 42); 

    g2d.setColor(Color.blue); 
    g2d.fillRect(284, 437, 22, 40); 
    g2d.setColor(Color.BLUE); 
    g2d.fillRect(284, 538, 22, 40); 
} 

我得到nullpointerexception錯誤和其他一些。我該怎麼做 ?

回答

0

您仍然需要將「g」(圖形)從某處傳遞給lowerIt,否則它將爲空,整個方法將失敗。

例如,如果你重寫paintComponent:

@Override 
    protected void paintComponent(Graphics g) { 
     super.paintComponent(g); 
     lowerIt(g); 
    } 

這樣,你在呼喚一個圖形對象的方法。

在你的情況,你應該做如下改變(加圖形對象的調用gSpusti():

 spust.addActionListener(new ActionListener(){ 
     public void actionPerformed(ActionEvent arg0) { 
     gSpusti(f2.getGraphics()); 
    }}); 
+0

我試圖做一些事情,但它不工作,同樣的錯誤全碼。這裏:http://piratepad.net/FbbEn2cGfm lower它被稱爲gSpusti。 – Skynet

+2

*「整個代碼在這裏:」*爲了更好的幫助更快,發佈一個[MCVE]或[短,自包含,正確的例子](http:///www.sscce.org/)並將其作爲[對問題的編輯]發佈(http://stackoverflow.com/posts/32652464/edit).. –

+0

我已添加對答案的更改以向您顯示確切地說,你沒有正確地傳遞圖形對象,我在屏幕右側看到兩輛紅色的小卡車,所以我g它運作。 – Ewald

相關問題