为了绘制轻量级组件,需要递归更新或绘制啥?
Posted
技术标签:
【中文标题】为了绘制轻量级组件,需要递归更新或绘制啥?【英文标题】:What is the need of recursive update or paint in order to paint lightweight component?为了绘制轻量级组件,需要递归更新或绘制什么? 【发布时间】:2015-11-03 21:10:55 【问题描述】:我正在阅读 this 关于在 AWT 和 Swing 中绘画的文章,该文章在 “轻量级如何绘制”部分中有以下段落
值得注意的是,Container.update() 的默认实现不使用递归来调用轻量级后代的 update() 或 paint()。这意味着任何使用 update() 进行增量绘制的重量级 Container 子类都必须确保在必要时递归地重新绘制轻量级后代。幸运的是,很少有重量级容器组件需要增量绘制,所以这个问题不会影响大多数程序。
请告诉我,在什么情况下我需要递归调用 update() 或 paint() 以及为什么?
【问题讨论】:
【参考方案1】:您不需要递归调用 update() 或 paint()。
如果你想绘制一个组件,你要做的就是:
component.repaint();
这将向RepaintManager
添加一个绘制请求以绘制组件,Swing 将确保在调用paintChildren(...)
方法时绘制组件的子组件。请参阅A Closer Look at the Paint Mechanism 了解更多信息。
【讨论】:
但是这一段呢,我知道repaint()这个东西,但是我无法理解上面的行。为什么会这样? 你为什么在乎?你有什么问题?不要在 Swing 应用程序中使用 AWT 组件。我不知道它是什么意思,但我猜它是说如果您将 Swing 组件添加到 AWT 组件,您将无法绘制 Swing 组件,因为 Swing 依赖于paintChildren(...)
来确保绘制子组件.以上是关于为了绘制轻量级组件,需要递归更新或绘制啥?的主要内容,如果未能解决你的问题,请参考以下文章