【发布时间】:2012-06-01 20:59:25
【问题描述】:
我可能在过去的两个小时里浏览和阅读了这些方法和 Graphics 类,也许我很愚蠢,哈哈,但我只是不理解它们。它们是干什么用的?我知道他们应该在屏幕上重绘或更新组件,但我从来不明白为什么需要这样做(我是新手)。例如,如果我在屏幕上移动 JLabel,调用 setLocation() 就可以很好地移动它。这是不需要 repaint() 的场景吗?它在哪些情况下有用,为什么?
如果您认为这是一个可以使用搜索功能解决的问题,但无论出于何种原因我没有得到它,我们深表歉意。
【问题讨论】:
-
内部调用重绘。它是从 JLabel 的 setLocation 方法中调用的。 (它实际上是一个较长的方法调用链,请随意关注它,看看里面有什么。你可以在任何严肃的 IDE 中进行操作)
-
好的,在 setLocation() 中调用它肯定会有所帮助。谢谢你。我什么时候会改变一些不会称之为的东西?
-
swing 库中的所有控件都可以在它们的属性以任何方式与它们的外观(位置、大小、颜色、文本等)发生变化时重新绘制。但是,当您想要实现非默认结果时,请自行实现 paint 方法。在 JApplets 中绘制几何图形是一种常见的练习。您可能还想阅读有关双缓冲的主题,这与调用这两种方法的方式有关。根据我的经验,一个更真实的例子是扩展一个摆动组件,通过覆盖绘画来绘制 wav 文件的傅立叶变换的频谱
-
谢谢!现在更有意义了。因此,如果我在视觉方面使用的所有内容都内置在 swing 中,我就不必担心调用 repaint()?
-
没错,库类会帮你搞定的。