Java中的paint()和repaint()

Java中的paint()和repaint(),java,paint,repaint,Java,Paint,Repaint,我可能花了两个小时浏览和阅读这些方法和图形学课程,也许我很愚蠢,哈哈,但我只是不理解它们。它们是干什么用的?我知道他们应该在屏幕上重新绘制或更新组件,但我一直不明白为什么需要这样做(我是新手)。例如,如果我在屏幕上移动一个JLabel,则调用setLocation()可以很好地移动它。这是一种不需要重新绘制()的场景吗?在哪些情况下它有用,为什么 如果您觉得这是一个可以使用搜索功能解决的问题,但无论出于何种原因,我都不明白,请道歉。除非您需要在组件上呈现特定内容,否则无需调用重新绘制。“特定的东

我可能花了两个小时浏览和阅读这些方法和图形学课程,也许我很愚蠢,哈哈,但我只是不理解它们。它们是干什么用的?我知道他们应该在屏幕上重新绘制或更新组件,但我一直不明白为什么需要这样做(我是新手)。例如,如果我在屏幕上移动一个JLabel,则调用setLocation()可以很好地移动它。这是一种不需要重新绘制()的场景吗?在哪些情况下它有用,为什么


如果您觉得这是一个可以使用搜索功能解决的问题,但无论出于何种原因,我都不明白,请道歉。

除非您需要在组件上呈现特定内容,否则无需调用重新绘制。“特定的东西”指的是您正在使用的窗口工具包内部未提供的任何东西。

Paint()和Repaint()方法的区别 绘画(): 此方法包含绘制此组件的说明。实际上,在Swing中,应该更改paintComponent()而不是paint(),因为paint调用paintBorder()、paintComponent()和paintChildren()。您不应该直接调用此方法,而应该调用repaint()

重新绘制(): 无法重写此方法。它控制update()->paint()循环。您应该调用此方法来获取要重新绘制自身的组件。如果您已更改组件的外观,但未更改其大小(如更改颜色、动画等),请调用此方法。

paint()方法支持通过图形对象进行绘制


repaint()
方法用于使AWT绘制线程调用
paint()

repaint在内部调用。它是从JLabel的setLocation方法中调用的。(实际上,它是一个较长的方法调用链,您可以随意跟随它并查看其中的内容。您可以在任何严肃的IDE中进行此操作)好的,在setLocation()中调用它肯定会有所帮助。非常感谢。当swing库中的所有控件的属性以任何方式与外观(位置、大小、颜色、文本等)连接时,它们都可以重新绘制自己。但是,如果希望获得非默认结果,请自行实现绘制方法。在日本画几何图形是一种常见的练习。您可能还想了解双缓冲的主题,它与两种方法的调用方式有关。根据我的经验,一个更真实的例子是扩展swing组件,通过覆盖paintThank来绘制wav文件的傅里叶变换频谱!现在更有意义了。因此,如果我在视觉方面使用的所有东西都内置在swing中,我就不必担心调用repaint()?没错,库类会帮你完成。很抱歉,我不理解这种反应。你能举个例子吗?将什么渲染到什么上?请参阅以获得良好的解释。是的,+1提到了paint()本身通常不应该被Swing中的用户代码覆盖。不幸的是,在阅读了大量文档之后,我已经听到了这一点。我只是想了解我将在哪些应用程序中使用它,以及“绘制此组件”的实际含义。这个答案的逻辑对我来说似乎有点违反直觉。对于paint,您描述“您不应该直接调用此方法,而应该调用repaint()”,然后您继续说,“如果您做了任何事情来更改组件的外观,但没有更改组件的大小,那么请调用此方法。”对于repaint,这意味着如果我更改了组件的大小,则无法调用这些函数中的任何一个。如果我更改了大小,这就是我希望它重新绘制UI的原因,那么我该调用什么?repaint()是否将组件重置为其原始状态?假设我有一个白色背景的JPanel,我在上面画了一个三角形。是否要重新绘制以删除该三角形并重置JPanel?