paintComponent(Graphics g) 中的 g 参数

g argument in paintComponent(Graphics g)

我是 java 的初学者。我在书上遇到方法paintComponent(),书上说系统在需要调用时调用该方法。

我的问题是 g 参数是什么?

Graphicsclass还是Graphics2Dclass的对象?

系统是如何传递的?

我们画完元件后是面板和图纸组成的吗?

我无法想象过程

非常感谢

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

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

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

The parameter g is a Graphics object. Actually, the object referenced by g is an instance of the Graphics2D class.

So, if we need to use a method from the Graphics2D class, we can' use the g in paintComponent(Graphics g) directly. However, we can cast it with a new Graphics2D variable

我想我找到了传递实际 Graphics2D 对象的位置。在 Component.java class 中,似乎在第 4356 行返回了一个 SunGraphics2D 对象并传递给调用 paintComponent 的 JPanel。

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 方法的地方之一。