在swing-java中,Graphics实例从哪里来?

6
当更新请求传递到swing时(无论是系统触发的,例如由于调整大小或被其他窗口阻止,还是应用程序触发的,例如通过调用repaint()方法),这个请求实际上如何处理?在RepaintManager中会发生什么过程?

6
需要多么详细?如果非常详细,您可以查看源代码,否则一个好的起点是官方文档:http://www.oracle.com/technetwork/java/painting-140037.html。 - Thomas
谢谢,我都读了。但我不明白Graphics实例是如何生成的。我追踪到一些peer.getGraphics()(在Component.getGraphics()内部调用),在那里我假设peer是重量级对等体(在您的链接中提到)。但是我在那里失去了轨迹。你知道*peer.getGraphics()*中发生了什么吗? - Untitled
1个回答

3

根据您的评论:

你知道 peer.getGraphics() 发生了什么吗?

这取决于使用的 peer 实现。

其中一种实现是 WComponentPeer(在 Windows 上运行时使用),它似乎有两种获取 Graphics 对象的方法:

  1. 如果组件的父级类型为 Window(或者组件本身就是一个)并且与其关联的后备缓冲区图像,则返回该图像的 Graphics 对象。这取决于图像的类型,但最可能是在 createGraphics() 中创建的 SunGraphics2D 实例。

  2. 否则会检索一个 ScreenUpdateManager 实例,并在其上调用 createGraphics(...),然后返回新的 SunGraphics2D 实例。

请注意,这只是一种可能的方式,它高度依赖于操作系统、JVM 和 UI 工具包的使用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接