2010-03-08 17 views
6

我開始在Java中(我學習microedition),我得到這個錯誤:在下面的類「INT無法提領」:INT無法提領

class DCanvas extends Canvas{ 
    public DCanvas(){ 

    } 

    public void drawString(String str, int x, int y, int r, int g, int b){ 
     g.setColor(r, g, b); //The error is here 
     g.drawString(str, x, y, 0); //and here 
    } 

    public void paint(Graphics g){ 
     g.setColor(100, 100, 220); 
     g.fillRect(0, 0, getWidth(), getHeight()); 
    } 
} 

什麼我錯在這裏做? 那麼我來自PHP和ECMAScripts,我能夠通過我的函數參數這樣我所以我真的不明白這個錯誤。

+0

呃,謝謝你們,我完全沒有注意到這個變量具有相同我的圖形對象的名稱,我認爲問題是當試圖重新傳遞函數參數到另一個函數(我知道,無意義= P),我忘了傳遞一個Graphics對象drawString方法。 – Delta 2010-03-08 14:59:42

回答

8

g in drawString是您傳入的顏色值,而不是您的Graphics參考。所以錯誤是當你試圖調用int的方法時,你不能這樣做。

//   Passing an integer 'g' into the function here | 
//               V 
public void drawString(String str, int x, int y, int r, int g, int b){ 
// | This 'g' is the integer you passed in 
// V 
    g.setColor(r, g, b); 
    g.drawString(str, x, y, 0); 
} 
2

您正在呼籲gsetColorfillRect方法,這是int類型的參數。
因爲int不是引用類型,所以不能調用它的方法。

您可能想要爲該函數添加Graphics參數。

1

雖然g在paint方法中,drawString方法中的Graphics類(其中包含setColor方法,fillRect方法和drawString方法)中的一個對象被定義爲一個Integer,該值爲綠色的值。特別是在行g.setColor(r, g, b);中,您可以使用g來設置顏色,也可以將其設置爲用於設置顏色的參數。 int沒有方法setColor(這也沒有意義),所以你得到一個錯誤。你可能想在這個方法中也得到一個Graphics對象。當你擴展畫布,你可以通過調用的getGraphics()得到一個圖形對象,所以你的例子可能是這樣的:

public void drawString(String str, int x, int y, int r, int g, int b){ 
    getGraphics().setColor(r, g, b); 
    getGraphics().drawString(str, x, y, 0); 
}