当更新请求传递到swing时(无论是系统触发的,例如由于调整大小或被其他窗口阻止,还是应用程序触发的,例如通过调用repaint()方法),这个请求实际上如何处理?在RepaintManager中会发生什么过程?
根据您的评论:
你知道 peer.getGraphics() 发生了什么吗?
这取决于使用的 peer 实现。
其中一种实现是 WComponentPeer
(在 Windows 上运行时使用),它似乎有两种获取 Graphics
对象的方法:
如果组件的父级类型为 Window
(或者组件本身就是一个)并且与其关联的后备缓冲区图像,则返回该图像的 Graphics
对象。这取决于图像的类型,但最可能是在 createGraphics()
中创建的 SunGraphics2D
实例。
否则会检索一个 ScreenUpdateManager
实例,并在其上调用 createGraphics(...)
,然后返回新的 SunGraphics2D
实例。
请注意,这只是一种可能的方式,它高度依赖于操作系统、JVM 和 UI 工具包的使用。