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

    10-06 07:18