2011-04-24 58 views
13

在处理swing组件时,以及在运行时更改组件时,通常需要调用组件上的revalidate()方法以刷新它们。什么时候需要在swing组件上调用revalidate()来刷新,什么时候不刷新?

确定是否需要重新验证组件的规则是什么?当组件上的某些特定属性发生更改时,swing会自动调用revalidate(),并且其他属性不会更改吗?

+0

请看这里http://stackoverflow.com/questions/1097366/java-swing-revalidate-vs-repaint – 2011-04-24 10:00:03

+0

@Romain已经阅读,而不是相同的问题。但是,谢谢 – Datoraki 2011-04-24 10:15:18

+0

很难说因为有EDT,基本上如果你添加/删除新的JComponent,那么你必须调用revalidate()+ repaint(),如果你改变已经可见的JComponent,然后validate()+ repaint(我的视图重新验证覆盖验证) – mKorbel 2011-04-24 10:32:26

回答

10

基本规则是:从不 - 内部摆动将会照顾它。该规则的基本例外是在运行时添加/删除组件,或者以系统无法知道或出于某种原因不想知道的方式影响布局的更改。

尽管异常并不是非常清晰,但在“正常”应用程序开发中的频率不高:如果需要“经常”调用它,代码很有可能出现错误f.i.不通知其听众的自定义模型实现。

+0

好的答案,谢谢=)。另外,从invalidate()javadoc中:“当一个属性值发生变化时,这个方法将自动被调用,这样这个组件的大小,位置或者内部布局都会受到影响。这种自动更新与AWT不同,因为程序一般不再需要调用验证来获取GUI的内容更新。“ – Datoraki 2011-04-24 11:03:49

+0

上述基本规则的改进:如果您要添加子项,请调用revalidate以使混合代码重置内部状态。 – BillYork67 2013-04-05 17:29:29