paintComponent(Graphics g) 中的 g 参数
g argument in paintComponent(Graphics g)
我是 java 的初学者。我在书上遇到方法paintComponent()
,书上说系统在需要调用时调用该方法。
我的问题是 g 参数是什么?
是Graphics
class还是Graphics2D
class的对象?
系统是如何传递的?
我们画完元件后是面板和图纸组成的吗?
我无法想象过程
非常感谢
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 方法的地方之一。
我是 java 的初学者。我在书上遇到方法paintComponent()
,书上说系统在需要调用时调用该方法。
我的问题是 g 参数是什么?
是Graphics
class还是Graphics2D
class的对象?
系统是如何传递的?
我们画完元件后是面板和图纸组成的吗?
我无法想象过程
非常感谢
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 方法的地方之一。