Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在JComponent.revalidate和Container.validate之间进行选择_Java_Swing_Layout - Fatal编程技术网

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

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

我正在使用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继承自容器和JComponent。我如何在两者之间做出选择

3个重要区别:

  • JComponent#revalidate()
    首先使组件无效,而
    Container#validate()
    则不会
  • JComponent#revalidate()
    不会立即验证,它会将组件添加到无效组件列表中,而
    重新绘制管理器将批量验证组件。这可以在需要大量验证时提高性能
  • JComponent#revalidate()
    可以从任何线程调用,而不仅仅是从事件调度线程调用

除非您需要立即生效(仅在特殊情况下需要),否则首选
JComponent#revalidate()

3重要区别:

  • JComponent#revalidate()
    首先使组件无效,而
    Container#validate()
    则不会
  • JComponent#revalidate()
    不会立即验证,它会将组件添加到无效组件列表中,而
    重新绘制管理器将批量验证组件。这可以在需要大量验证时提高性能
  • JComponent#revalidate()
    可以从任何线程调用,而不仅仅是从事件调度线程调用
除非您需要立即生效(仅在特殊情况下需要),否则首选
JComponent#revalidate()