【发布时间】:2018-08-01 14:42:52
【问题描述】:
我是java初学者。我在一本书中遇到方法paintComponent(),书中说系统在需要调用该方法时调用该方法。
我的问题是 g 参数是什么?
是Graphics类还是Graphics2D类的对象?
系统是如何传递的?
我们绘制组件后是否由面板和图纸组成?
我无法想象过程
非常感谢
【问题讨论】:
-
Graphic g引用也可以接受Graphic2D类的实例,因为该类是Graphic的子类型。您可以通过打印g.getClass()的结果找出传递了哪个类的实例。 -
“我的问题是 g 参数是什么?” Java 文档很棒,请参阅
JComponent.paintComponent(Graphics)。话虽如此,传递给 Swing 绘制方法的Graphics实例通常可转换为Graphics2D。只是,这不保证。 -
@Andrew Thompson 如何将对超类实例的引用转换为子类实例?我知道这是不可能的
-
什么意思?如果
class Child extends Parent{..}则使用代码void someMethod(Parent p){ Child ch = (Child) p}是可能的并且将编译,因为它可以与Child实例一起使用,例如someMethod(new Child());。如果您传递Parent实例,它可能无法正常工作,但是您将得到运行时异常。 -
@Pshemo 好的,谢谢。因此,当系统将 Graphics2D 类型的参数传递给方法时,可以进行强制转换
标签: java swing graphics jpanel paintcomponent