Java Swing重新验证()vs repaint()

我正在放置一个Swing应用程序,我经常想要替换JPanel的内容。 为此,我调用removeAll() ,然后添加我的新内容,然后调用revalidate()

不过,我发现旧内容实际上仍然可见(虽然被新内容遮蔽了)。 如果我除了revalidate()之外还调用了repaint() revalidate() ,它将按预期工作。

我确信在其他场合我经历过,只是调用revalidate()就足够了。

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


你需要调用repaint()revalidate() 。 前者告诉Swing窗口的某个区域很脏(这是擦除removeAll()移除的旧的子项的图像所必需的); 后者告诉布局管理器重新计算布局(添加组件时这是必要的)。 这应该导致面板的孩子重绘,但可能不会导致面板本身这样做(参见重做触发器的列表)。

在更一般的说明中:我不建议重新使用原始面板,而是建立一个新面板并将其交换到父面板。


任何时候你做一个remove()或removeAll(),你都应该调用

  validate();
  repaint();

在完成添加()新组件之后。

在执行remove()时,调用validate()或revalidate()是强制性的 - 请参阅相关的javadoc。

我自己的测试表明repaint()也是必需的。 我不确定为什么。


一旦添加新组件或删除旧组件,就会在容器上调用revalidate 。 这个调用是一条指令,告诉布局管理器根据新的组件列表进行重置。 revalidate会触发revalidate调用组件认为是“脏区域”的调用。 显然,并非所有的JPanel区域都被RepaintManager认为是脏的。

repaint用于告诉组件重新绘制自己。 通常情况下,您需要调用它来清理诸如您的条件。

链接地址: http://www.djcxy.com/p/88881.html

上一篇: Java Swing revalidate() vs repaint()

下一篇: How to add an image to a JPanel?