gpt4 book ai didi

java - paintComponent(Graphics g) 中的 g 参数

转载 作者:行者123 更新时间:2023-11-30 10:12:54 25 4
gpt4 key购买 nike

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

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

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

系统是如何传递的?

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

我无法想象这个过程

非常感谢

最佳答案

Graphics 参数是一个 Graphics2D 对象。在这种情况下,paint 方法采用抽象 Graphics 类。此类无法实例化。 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 类中,似乎在第 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 方法的地方之一。

关于java - paintComponent(Graphics g) 中的 g 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51636182/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com