Swing实际上是如何在代码级别重用重量级祖先的本机窗口的

Swing实际上是如何在代码级别重用重量级祖先的本机窗口的,swing,Swing,如果Swing完全是用Java编写的,并且它重用了HeavweightThw祖先的窗口,那么它背后的逻辑是什么? 我的意思是,若swing扩展了HW组件类,那个么HW组件将再次调用本机调用,所以本机调用会被调用。 但是swing很轻,所以我的理解在哪里失败了?绘制swing图形的本机组件不是Java类层次结构的一部分。某些组件被称为重量级组件,但这只是因为它们的图形背景或多或少直接对应于本地组件 大多数Swing组件绘制到由视觉层次结构中的重量级祖先提供的缓冲区中;该重量级祖先负责将Java绘制

如果Swing完全是用Java编写的,并且它重用了HeavweightThw祖先的窗口,那么它背后的逻辑是什么? 我的意思是,若swing扩展了HW组件类,那个么HW组件将再次调用本机调用,所以本机调用会被调用。
但是swing很轻,所以我的理解在哪里失败了?

绘制swing图形的本机组件不是Java类层次结构的一部分。某些组件被称为重量级组件,但这只是因为它们的图形背景或多或少直接对应于本地组件


大多数Swing组件绘制到由视觉层次结构中的重量级祖先提供的缓冲区中;该重量级祖先负责将Java绘制的图形移动到本机组件进行显示。

但最终绘制是在本机环境中进行的,现在唯一的事情是中间有一个接口来处理此步骤,如果这个缓冲区负责图形绘制,那么它是否像在重量级和轻量级组件中绘制图形一样,都需要几乎相同的时间,或者两者都可以被视为超出我所描述的成本,则由AWT内部实现来确定本地操作应用的位置和时间。有些实现可能只是复制一个图像缓冲区,有些可能将Graphics2D请求转换为可用画布上的本机图形原语。