Java 摆动刷新周期
我试图理解何时使用重新验证/重新喷漆/打包 令人惊讶的是,我还没有找到详细的引擎盖下的文档(请随意链接) 到目前为止,我了解到这是重新油漆经理的全部责任Java 摆动刷新周期,java,swing,refresh,repaint,Java,Swing,Refresh,Repaint,我试图理解何时使用重新验证/重新喷漆/打包 令人惊讶的是,我还没有找到详细的引擎盖下的文档(请随意链接) 到目前为止,我了解到这是重新油漆经理的全部责任 油漆/重新油漆指被视为脏/干净的东西 打包/验证/重新验证指的是什么是有效的 说明调用重绘使事件调度程序线程上的作业排队,该线程将调用组件上的paintInstance()(这将重绘组件) 指示有效或无效与LayoutManager关联。这都是关于组件的大小,而不是内容 当您移动/调整组件大小时应该调用revalidate,当您更改组件内容
- 油漆/重新油漆指被视为脏/干净的东西
- 打包/验证/重新验证指的是什么是有效的
下面是一些需要调用这些方法的基本情况(我介绍了一些基本情况,但可能遗漏了一些需要调用这些方法的其他情况)
布局管理器时,应在容器上调用revalidate()
repaint()
。最终,这将调用paintComponent()
(对于基本小部件,这将委托给XXXUI.paint())、paintBorder()
和paintChildren()
(至少在Swing中)pack()
实际上将窗口的大小设置为其首选大小。您通常应该在使窗口可见之前调用此选项。稍后您可能会调用它,但这将提供一种奇怪的用户体验(我不知道有多少应用程序会在显示窗口后调整其大小)使用
revalidate()
和repaint()
的主要优点是它们可以合并。这意味着,如果多次调用repaint()
,则只能执行一次绘制。您可以根据绘制所意味的更改来定义绘制吗?我开始怀疑我是否完全理解它的意思。@kotoko我不确定我是否得到了你想要的答案(请写下你的评论)。当您绘制(实现paintComponent()
方法)时,意味着您绘制直线、圆(填充或不填充)、矩形(填充或不填充)、图像、文本等。。。(所有在图形/Graphics2D
上实际可以调用的操作)。我试图了解什么方法触发了什么。现在我明白了(经验法则):布局/组件相关操作影响是否有效(1);Graphics/Graphics2D操作会影响是否脏。我发现了一个与您所说相反的示例:带有固定面板的拆分窗格,当我在固定面板上删除所有()时,在我重新绘制之前,任何内容都不会更新。@kotoko它与我在回答中所述的内容有何矛盾?我可能没有直接说的是,几乎在任何时候调用revalidate()
,repaint()
,也应该在之后立即调用(但事实并非相反)