3 回答
TA贡献1851条经验 获得超5个赞
对你的问题的(非常)简短回答paintComponent
是“当它需要时”。有时将Java Swing GUI系统视为“黑盒子”更容易,其中许多内部构件在没有太多可见性的情况下处理。
有许多因素决定了何时需要重新绘制一个组件,包括移动,重新调整大小,改变焦点,被其他框架隐藏,等等。其中许多事件都是自动神奇地检测到的,并且paintComponent
在确定需要进行该操作时在内部调用。
我和Swing一起工作了很多年,我认为我没有paintComponent
直接打过电话,甚至没有直接打过电话。我最接近的是使用repaint()
方法以编程方式触发某些组件的重绘(我假设调用paintComponent
下游的正确方法)。
根据我的经验,paintComponent
很少直接覆盖。我承认有些自定义渲染任务需要这样的粒度,但Java Swing确实提供了一套(相当)强大的JComponents和Layouts,可用于完成大部分繁重工作而无需直接覆盖paintComponent
。我想我的观点是确保在您尝试滚动自己的自定义渲染组件之前,您无法对本机JComponents和Layouts执行某些操作。
TA贡献1891条经验 获得超3个赞
调用object.paintComponent(g)
是一个错误。
而是在创建面板时自动调用此方法。该paintComponent()
方法也可以通过类中repaint()
定义的方法显式调用Component
。
调用的效果repaint()
是Swing自动清除面板上的图形并执行该paintComponent
方法以重绘该面板上的图形。
添加回答
举报