我是java的初学者。我在一本书中遇到了方法paintComponent(),书中说,当需要调用该方法时,系统会调用它。
我的问题是,g的论点是什么?
它是Graphics类的对象还是Graphics2D类的对象?
它是如何通过系统的?
在绘制组件后,它是否由面板和图纸组成?
我无法想象这个程序
非常感谢
发布于 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。
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方法的地方之一。
https://stackoverflow.com/questions/51636182
复制相似问题