永发信息网

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

答案:3  悬赏:0  手机版
解决时间 2021-02-23 00:12
  • 提问者网友:放下
  • 2021-02-22 11:43
学习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在哪里被创建的呢?
最佳答案
  • 五星知识达人网友:西岸风
  • 2021-02-22 12:19
自己的程序中重写paint方法也是形参,不是实参,实参是在系统自动调用paint方法时候传递的
全部回答
  • 1楼网友:话散在刀尖上
  • 2021-02-22 15:25
你好! Graphics是一个抽象类,也就是说不可以直接实例化对象,只能采取 Graphics g = jp.getGraphics() 的方法来获取画布工具并传Graphics的g对象,这里的jp是某个实例化的窗体或者面板对象,对应画出来的图像就在这个jp容器上面 如果没有经过getGraphics()这一步,就会默认为取的是你实例化的MainJFrame作为画布对象, 有了画布对象自然就可以在上面随便画了,而且由于是引用传递,所以传的是地址,不是值,所以形参和实参也就没多大差别了,都是在直接访问地址的。 如有疑问,请追问。
  • 2楼网友:狂恋
  • 2021-02-22 13:51
不知道你懂不懂C语言,作为参数被传入函数的指针,可被修改及赋予其他功能。 Graphics 类型的g被paint修改后,可作为画图类。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯