什么时候需要在 swing 组件上调用 revalidate() 以使其刷新,什么时候不需要?
Posted
技术标签:
【中文标题】什么时候需要在 swing 组件上调用 revalidate() 以使其刷新,什么时候不需要?【英文标题】:When does one need to call revalidate() on a swing component to make it refresh, and when not? 【发布时间】:2011-08-11 19:20:54 【问题描述】:在处理摆动组件时,以及在运行时更改组件时,(通常)需要调用组件上的 revalidate() 方法以使它们刷新。
决定是否需要重新验证组件的规则是什么?当组件的某些特定属性发生变化时,swing 会自动调用 revalidate(),而其他一些属性则不会?
【问题讨论】:
见这里***.com/questions/1097366/… @Romain 已经阅读,而不是同一个问题。不过谢谢 很难说因为有EDT,基本上如果你添加/删除新的JComponent,那么你必须调用revalidate()+ repaint(),如果你改变已经可见的JComponent,然后validate() + 重绘(我的视图重新验证也包括验证) 【参考方案1】:基本规则是:从不——swing internals 会处理它。该规则的基本例外是在运行时添加/删除组件或以系统无法知道或出于某种原因不想做出反应的方式更改影响布局。
虽然这个例外不是很明确,但它在“正常”应用程序开发中并不常见:如果需要“经常”调用它,那么代码很可能有问题,f.i.自定义模型实现未通知其侦听器。
【讨论】:
好答案,谢谢 =)。此外,来自 invalidate() javadoc:“当属性值发生变化时,此组件的大小、位置或内部布局受到影响时,将自动调用此方法。这种自动更新与 AWT 不同,因为程序通常不再需要调用 validate 来更新 GUI 的内容。" 对上述基本规则的改进:如果您要添加孩子,请调用 revalidate 让混合代码重置内部状态。以上是关于什么时候需要在 swing 组件上调用 revalidate() 以使其刷新,什么时候不需要?的主要内容,如果未能解决你的问题,请参考以下文章
用java编写的swing程序。如何在主界面中实现刷新的功能,就是让主界面的组件刷新
用java编写的swing程序。如何在主界面中实现刷新的功能,就是让主界面的组件刷新