首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >G参数在paintComponent(图形g)中的应用

G参数在paintComponent(图形g)中的应用
EN

Stack Overflow用户
提问于 2018-08-01 14:42:52
回答 1查看 1.3K关注 0票数 2

我是java的初学者。我在一本书中遇到了方法paintComponent(),书中说,当需要调用该方法时,系统会调用它。

我的问题是,g的论点是什么?

它是Graphics类的对象还是Graphics2D类的对象?

它是如何通过系统的?

在绘制组件后,它是否由面板和图纸组成?

我无法想象这个程序

非常感谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-01 15:09:45

Graphics参数是一个Graphics2D对象。在这种情况下,case方法接受一个抽象Graphics类。无法实例化该类。Java将传递给它一个Graphics2D对象,当您需要使用'g‘时,您需要将它转换为Graphics2D以确认它是一个Graphics2D实例。然后可以使用它作为Graphics2D对象,而不是作为实现抽象图形对象的实例。

因此,当'g‘是一个Graphics对象时,为该方法传递一个Graphics2D对象,并且需要一个强制转换才能使用它。

本教程很好地总结了它(http://www.bogotobogo.com/Java/tutorials/javagraphics3.php):

参数g是Graphics对象。实际上,g引用的对象是Graphics2D类的一个实例。 因此,如果我们需要使用来自Graphics2D类的方法,我们可以直接在paintComponent(Graphics )中使用g。但是,我们可以使用一个新的Graphics2D变量来转换它。

我想我找到了传递实际Graphics2D对象的位置。在Component.java类中,它看起来像是在第4356行中返回一个SunGraphics2D对象并传递给调用paintComponent的JPanel。

代码语言:javascript
复制
public Graphics getDrawGraphics() {
    revalidate();
     Image backBuffer = getBackBuffer();
      if (backBuffer == null) {
          return getGraphics();
       }
       SunGraphics2D g = (SunGraphics2D)backBuffer.getGraphics();
       g.constrain(-insets.left, -insets.top,
                    backBuffer.getWidth(null) + insets.left,
                    backBuffer.getHeight(null) + insets.top);
       return g;
    }

我不确定这是否正是生成Graphics2D对象的地方,但它肯定是传递给paintComponent方法的地方之一。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51636182

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档