代码之家  ›  专栏  ›  技术社区  ›  William

Java Swing重新验证()与重新绘制()的比较

  •  201
  • William  · 技术社区  · 17 年前

    removeAll() ,然后添加我的新内容,然后调用 revalidate() .

    然而,我发现旧的内容仍然是可见的(尽管被新的内容掩盖了)。如果我添加一个呼叫到 repaint() 除了 重新验证() ,它按预期工作。

    我相信在其他场合我也经历过打电话 够了。

    所以基本上我的问题是-我应该调用这两个函数吗?如果不是,我应该什么时候调用它们?

    5 回复  |  直到 14 年前
        1
  •  165
  •   kdgregory    11 年前

    你需要打电话 repaint() revalidate() removeAll() ); 后者告诉布局管理器重新计算布局(这在添加组件时是必要的)。这应该引起 儿童 重新绘制面板的外观,但可能不会导致面板本身重新绘制(请参见 this

    更一般地说:与其重复使用原来的面板,我建议构建一个新面板,并在父面板上交换它们。

        2
  •  89
  •   Noel Grandin    16 年前

      validate();
      repaint();
    

    完成添加新组件后。

    执行remove()时,必须调用validate()或revalidate()-请参阅相关的javadocs。

    我自己的测试表明repaint()也是必要的。我不知道确切的原因。

        3
  •  60
  •   akf    17 年前

    revalidate 在添加新组件或删除旧组件后在容器上调用。此调用指示布局管理器根据新元件列表重置。 重新验证 JPanel 被警察认为是肮脏的 RepaintManager .

    repaint

        4
  •  5
  •   Poorna Senani Gamage    8 年前

    revalidate() 重新验证() repaint() 在重新布局期间更改其边界时。在您提到的情况下,只删除了组件,没有更改组件边界,这种情况下没有 重画

        5
  •  -4
  •   Som Adhikari    10 年前

    重新油漆(); 调用removeAll()时,必须调用repaint()和revalidate()