为了绘制轻量级组件,需要递归更新或绘制啥?

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(...) 来确保绘制子组件.

以上是关于为了绘制轻量级组件,需要递归更新或绘制啥?的主要内容,如果未能解决你的问题,请参考以下文章

java中paint()的具体用法是啥?

用于地图绘制的Java库?

轻量级HTML5插件使用jQuery绘制SVG图形轮廓线路径动画教程

如何在 C++ 中绘制纹理/位图的区域?

setVisible() 和正在绘制的组件之间会发生啥?

YYDS!Dexplot:一行 Python 代码轻松绘制统计图表!