java swing 中的 paint(Graphics g) 中,g这个实例是由哪个类创建的?

学习javaswing的时候遇到这个问题,一直倍受困扰。查看过JComponent的源程序,只找到voidpaint(Graphicsg)的方法定义publicvoidp... 学习java swing的时候遇到这个问题,一直倍受困扰。查看过JComponent的源程序,只找到void paint(Graphics g)的方法定义
public void paint(Graphics g) {
boolean shouldClearPaintFlags = false;
if ((getWidth() <= 0) || (getHeight() <= 0)) {
return;
}
Graphics componentGraphics = getComponentGraphics(g);
Graphics co = componentGraphics.create();
try {
RepaintManager repaintManager = RepaintManager.currentManager(this);
Rectangle clipRect = co.getClipBounds();
int clipX;
int clipY;
int clipW;
int clipH;
。。。。。。
Graphics g 是形式参数,怎么最后到了自己的程序中变成了实参了呢?我可以直接使用
super.paint(g);
g.draw3DRect(0, 0, 10, 20, false);
来在组件上面画图。g在这里应该是一个实例化后的对象,g在哪里被创建的呢?
展开
 我来答
sishenljm
2013-08-08
知道答主
回答量:8
采纳率:0%
帮助的人:1.1万
展开全部
Graphics是一个抽象类,也就是说不可以直接实例化对象,只能采取
Graphics g = jp.getGraphics()
的方法来获取画布工具并传Graphics的g对象,这里的jp是某个实例化的窗体或者面板对象,对应画出来的图像就在这个jp容器上面
如果没有经过getGraphics()这一步,就会默认为取的是你实例化的MainJFrame作为画布对象,
有了画布对象自然就可以在上面随便画了,而且由于是引用传递,所以传的是地址,不是值,所以形参和实参也就没多大差别了,都是在直接访问地址的。
沉西小0K
2013-08-07 · TA获得超过231个赞
知道小有建树答主
回答量:207
采纳率:0%
帮助的人:183万
展开全部
不知道你懂不懂C语言,作为参数被传入函数的指针,可被修改及赋予其他功能。
Graphics 类型的g被paint修改后,可作为画图类。
更多追问追答
追问
不懂C语言,对于指针没有概念,觉得和java中的引用类型差不多吧?
书上说java是按照值来传递方法的参数的,java的类型有primitive type和reference引用类型,参数是引用类型时,传入的是引用类型的内存地址。

总之非常感谢!我理解起来有困难
追答
嗯啊,JAVA中除了基本类型就是引用类型了,也可以说引用相当于C语言的指针。
还是那句话,g被paint()包装了。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
墨墨江湖梦
2013-08-07
知道答主
回答量:11
采纳率:0%
帮助的人:13.2万
展开全部
自己的程序中重写paint方法也是形参,不是实参,实参是在系统自动调用paint方法时候传递的
更多追问追答
追问
感谢解答!我在用eclipse debug时,发现这个g是一个具体的对象,有地址(xxx@xxxx)的一个对象,按说应该是实参啊。
追答
你debug到方法内部就说明有地方调用了他,肯定就会传递参数,形参和实参的区别你可以先去看一下。方法定义时的参数叫形参,只在此方法中有效,只是一个代号,别称;调用方法是传递的对象是实参,是个对象,不只是个代号
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式