Java 如何在JComponent.revalidate和Container.validate之间进行选择
我正在使用WindowBuilder和Swing。我正在Swing JPanel上执行以下操作:Java 如何在JComponent.revalidate和Container.validate之间进行选择,java,swing,layout,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()在实践中似乎做了同样的事情。我没有观察到任何行为上的差异。JPane
java.awt.Container.setLayout()
java.awt.Container.removeAll()
java.awt.Container.add()
要完成,我调用:
java.awt.Container.validate()
,但我注意到javax.swing.JComponent.revalidate()
在实践中似乎做了同样的事情。我没有观察到任何行为上的差异。JPanel继承自容器和JComponent。我如何在两者之间做出选择 3个重要区别:
首先使组件无效,而JComponent#revalidate()
则不会Container#validate()
不会立即验证,它会将组件添加到无效组件列表中,而JComponent#revalidate()
重新绘制管理器将批量验证组件。这可以在需要大量验证时提高性能
可以从任何线程调用,而不仅仅是从事件调度线程调用JComponent#revalidate()
除非您需要立即生效(仅在特殊情况下需要),否则首选
JComponent#revalidate()
。3重要区别:
首先使组件无效,而JComponent#revalidate()
则不会Container#validate()
不会立即验证,它会将组件添加到无效组件列表中,而JComponent#revalidate()
重新绘制管理器将批量验证组件。这可以在需要大量验证时提高性能
可以从任何线程调用,而不仅仅是从事件调度线程调用JComponent#revalidate()
JComponent#revalidate()