2010-03-08 46 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); 
}