Swing组件具有与屏幕布局更新有关的多种方法,尤其是:
validate()
invalidate()
revalidate()
Java文档从技术角度对这些进行了一些定义,但是尚不清楚如何使用它们。
两者之间有什么区别,在什么情况下应使用一种而不是其他方式?
最佳答案
invalidate()
将容器标记为无效。表示内容某种程度上是错误的,必须重新布置。但这只是一种标记/标志。以后可能必须刷新多个无效的容器。validate()
执行中继。这意味着要求无效的内容的所有大小,并且所有子组件的大小都由LayoutManager设置为适当的值。revalidate()
只是两者的总和。它将容器标记为无效并执行容器的布局。
更新:
Component.java的一些代码
public void revalidate() {
revalidateSynchronously();
}
/**
* Revalidates the component synchronously.
*/
final void revalidateSynchronously() {
synchronized (getTreeLock()) {
invalidate();
Container root = getContainer();
if (root == null) {
// There's no parents. Just validate itself.
validate();
} else {
while (!root.isValidateRoot()) {
if (root.getContainer() == null) {
// If there's no validate roots, we'll validate the
// topmost container
break;
}
root = root.getContainer();
}
root.validate();
}
}
}