我正在使用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。我如何在它们之间做出选择?
答案 0 :(得分:1)
3个重要差异:
JComponent#revalidate()
首先使Container#validate()
不执行的组件无效。JComponent#revalidate()
未立即验证,它将组件添加到无效组件列表中,RepaintManager
将批量验证组件。当需要大量验证时,这可以提高性能。JComponent#revalidate()
可以从任何线程调用,而不仅仅是事件调度线程。除非您需要立竿见影(仅在特殊情况下才需要),JComponent#revalidate()
是首选。