如何在JComponent.revalidate和Container.validate之间进行选择

时间:2011-10-19 06:53:11

标签: java swing layout

我正在使用WindowBuilder和Swing。我在Swing JPanel上执行以下操作:

java.awt.Container.setLayout()
java.awt.Container.removeAll()
java.awt.Container.add()

完成我调用:

java.awt.Container.validate()但我注意到javax.swing.JComponent.revalidate()似乎在实践中做了同样的事情。我没有发现任何行为上的差异。 JPanel继承自Container和JComponent。我如何在它们之间做出选择?

1 个答案:

答案 0 :(得分:1)

3个重要差异:

  • JComponent#revalidate()首先使Container#validate()不执行的组件无效。
  • JComponent#revalidate()未立即验证,它将组件添加到无效组件列表中,RepaintManager将批量验证组件。当需要大量验证时,这可以提高性能。
  • JComponent#revalidate()可以从任何线程调用,而不仅仅是事件调度线程。

除非您需要立竿见影(仅在特殊情况下才需要),JComponent#revalidate()是首选。