gpt4 book ai didi

java - Swing GUI 中 validate()、revalidate() 和 invalidate() 之间的区别

转载 作者:IT老高 更新时间:2023-10-28 11:23:58 27 4
gpt4 key购买 nike

Swing 组件有多种与屏幕布局更新相关的方法,特别是:

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();
}
}
}

关于java - Swing GUI 中 validate()、revalidate() 和 invalidate() 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9510125/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com