Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.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 何时需要对swing组件调用revalidate()以使其刷新,何时不需要?_Java_Swing_Validation_Invalidation - Fatal编程技术网

Java 何时需要对swing组件调用revalidate()以使其刷新,何时不需要?

Java 何时需要对swing组件调用revalidate()以使其刷新,何时不需要?,java,swing,validation,invalidation,Java,Swing,Validation,Invalidation,在处理swing组件时,以及在运行时更改组件时,通常需要对组件调用revalidate()方法以使其刷新 确定是否需要重新验证组件的规则是什么?当组件上的某些属性发生更改时,swing是否会自动调用revalidate(),而对于某些其他属性,则不会自动调用?基本规则是:永远不要-swing内部将处理它。该规则的基本例外是在运行时添加/删除组件,或以系统不知道或出于某种原因不想做出反应的方式影响布局的更改 虽然异常不是很明确,但在“正常”应用程序开发中很少出现:如果需要“经常”调用它,那么代码很

在处理swing组件时,以及在运行时更改组件时,通常需要对组件调用revalidate()方法以使其刷新


确定是否需要重新验证组件的规则是什么?当组件上的某些属性发生更改时,swing是否会自动调用revalidate(),而对于某些其他属性,则不会自动调用?

基本规则是:永远不要-swing内部将处理它。该规则的基本例外是在运行时添加/删除组件,或以系统不知道或出于某种原因不想做出反应的方式影响布局的更改


虽然异常不是很明确,但在“正常”应用程序开发中很少出现:如果需要“经常”调用它,那么代码很可能有问题,例如,自定义模型实现没有通知其侦听器

看这里@Romain已经读过了,不是同一个问题。但是感谢Shard说了些什么,因为有EDT,基本上如果你添加/删除新的JComponent,那么你必须调用revalidate()+repaint(),如果你更改了已经可见的JComponent,那么validate()+repaint(我的视图revalidate也包括validate)回答得好,谢谢=)。另外,从invalidate()javadoc:“当属性值更改,以致此组件的大小、位置或内部布局受到影响时,将对此组件自动调用此方法。”。这种自动更新与AWT不同,因为程序通常不再需要调用validate来更新GUI的内容。对上述基本规则的改进:如果要添加子项,请调用revalidate,让混合代码重置内部状态。