我正在使用 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。我如何在它们之间进行选择?
3 个重要区别:
JComponent#revalidate()
首先使组件失效,而 Container#validate()
不会这样做。
JComponent#revalidate()
不会立即验证,而是将组件添加到无效组件列表中,并且 RepaintManager
将批量验证组件。当需要大量验证时,这可以提高性能。
JComponent#revalidate()
可以从任何线程调用,而不仅仅是事件调度线程。
除非您需要立即生效(仅在特殊情况下需要),否则首选 JComponent#revalidate()
。
我是一名优秀的程序员,十分优秀!