JavaSwing重新验证()与reploy()

JavaSwing重新验证()与reploy()

我把一个Swing应用程序放在一起,我经常想要替换JPanel的内容。为了做到这一点,我打电话给removeAll(),然后添加新内容,然后调用revalidate().

然而,我发现旧的内容仍然是可见的(尽管被新的内容掩盖了)。如果我给repaint()除了……之外revalidate(),如预期的那样工作。

我相信在其他场合我只是打电话revalidate()就够了。

因此,基本上我的问题是-我是否需要调用这两个函数,如果没有,我应该在什么时候调用它们?


不负相思意
浏览 563回答 3
3回答

慕勒3428872

你需要打电话repaint()和revalidate()..前者告诉Swing,窗口的一个区域是脏的(这是删除被删除的老孩子的图像所必需的)。removeAll());后者告诉布局管理器重新计算布局(在添加组件时是必要的)。这应该导致儿童重新绘制面板,但可能不会导致面板本身重新绘制(请参见这,这个用于重绘触发器的列表)。更一般的注意:我建议构建一个新的面板,并在父面板上交换它们,而不是重用原来的面板。

明月笑刀无情

无论何时执行Remove()或emoveAll(),都应该调用  validate();   repaint();在完成了新组件的add()之后。在执行Remove()时,必须调用VALIDEAD()或REVALUALE()-参见相关的javadocs。我自己的测试表明,重新绘制()也是必要的。我不知道为什么。

白衣非少年

revalidate一旦添加新组件或删除旧组件后,将在容器上调用。此调用是通知布局管理器根据新组件列表重置的指令。revalidate将触发调用,重新绘制组件认为是“脏区域”的内容。显然不是所有的区域JPanel被认为是脏的。RepaintManager.repaint用于告诉组件重新绘制自身。通常情况下,您需要调用它来清理像您这样的条件。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java