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在哪里被创建的呢? 展开
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在哪里被创建的呢? 展开
3个回答
展开全部
Graphics是一个抽象类,也就是说不可以直接实例化对象,只能采取
Graphics g = jp.getGraphics()
的方法来获取画布工具并传Graphics的g对象,这里的jp是某个实例化的窗体或者面板对象,对应画出来的图像就在这个jp容器上面
如果没有经过getGraphics()这一步,就会默认为取的是你实例化的MainJFrame作为画布对象,
有了画布对象自然就可以在上面随便画了,而且由于是引用传递,所以传的是地址,不是值,所以形参和实参也就没多大差别了,都是在直接访问地址的。
Graphics g = jp.getGraphics()
的方法来获取画布工具并传Graphics的g对象,这里的jp是某个实例化的窗体或者面板对象,对应画出来的图像就在这个jp容器上面
如果没有经过getGraphics()这一步,就会默认为取的是你实例化的MainJFrame作为画布对象,
有了画布对象自然就可以在上面随便画了,而且由于是引用传递,所以传的是地址,不是值,所以形参和实参也就没多大差别了,都是在直接访问地址的。
佳达源
2024-10-28 广告
2024-10-28 广告
AR0144CSSM20SUKA0-CPBR这款产品,作为我司产品线中的重要一员,集成了高精度的传感器技术与先进的图像处理算法,广泛应用于安防监控、工业自动化及机器视觉等领域。其卓越的性能与稳定性,确保了在各种复杂环境下的精准数据采集与高效...
点击进入详情页
本回答由佳达源提供
展开全部
不知道你懂不懂C语言,作为参数被传入函数的指针,可被修改及赋予其他功能。
Graphics 类型的g被paint修改后,可作为画图类。
Graphics 类型的g被paint修改后,可作为画图类。
更多追问追答
追问
不懂C语言,对于指针没有概念,觉得和java中的引用类型差不多吧?
书上说java是按照值来传递方法的参数的,java的类型有primitive type和reference引用类型,参数是引用类型时,传入的是引用类型的内存地址。
总之非常感谢!我理解起来有困难
追答
嗯啊,JAVA中除了基本类型就是引用类型了,也可以说引用相当于C语言的指针。
还是那句话,g被paint()包装了。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
自己的程序中重写paint方法也是形参,不是实参,实参是在系统自动调用paint方法时候传递的
更多追问追答
追问
感谢解答!我在用eclipse debug时,发现这个g是一个具体的对象,有地址(xxx@xxxx)的一个对象,按说应该是实参啊。
追答
你debug到方法内部就说明有地方调用了他,肯定就会传递参数,形参和实参的区别你可以先去看一下。方法定义时的参数叫形参,只在此方法中有效,只是一个代号,别称;调用方法是传递的对象是实参,是个对象,不只是个代号
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询