为了账号安全,请及时绑定邮箱和手机立即绑定

JavaSwing重新验证()与reploy()

JavaSwing重新验证()与reploy()

不负相思意 2019-06-16 16:24:55
JavaSwing重新验证()与reploy()我把一个Swing应用程序放在一起,我经常想要替换JPanel的内容。为了做到这一点,我打电话给removeAll(),然后添加新内容,然后调用revalidate().然而,我发现旧的内容仍然是可见的(尽管被新的内容掩盖了)。如果我给repaint()除了……之外revalidate(),如预期的那样工作。我相信在其他场合我只是打电话revalidate()就够了。因此,基本上我的问题是-我是否需要调用这两个函数,如果没有,我应该在什么时候调用它们?
查看完整描述

3 回答

?
慕勒3428872

TA贡献1848条经验 获得超6个赞

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

更一般的注意:我建议构建一个新的面板,并在父面板上交换它们,而不是重用原来的面板。


查看完整回答
反对 回复 2019-06-16
?
明月笑刀无情

TA贡献1828条经验 获得超4个赞

无论何时执行Remove()或emoveAll(),都应该调用

  validate();
  repaint();

在完成了新组件的add()之后。

在执行Remove()时,必须调用VALIDEAD()或REVALUALE()-参见相关的javadocs。

我自己的测试表明,重新绘制()也是必要的。我不知道为什么。


查看完整回答
反对 回复 2019-06-16
?
白衣非少年

TA贡献1155条经验 获得超0个赞

revalidate一旦添加新组件或删除旧组件后,将在容器上调用。此调用是通知布局管理器根据新组件列表重置的指令。revalidate将触发调用,重新绘制组件认为是“脏区域”的内容。显然不是所有的区域JPanel被认为是脏的。RepaintManager.

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


查看完整回答
反对 回复 2019-06-16
  • 3 回答
  • 0 关注
  • 562 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信