Java Swing revalidate()vs repaint()

问题:

我正在组合一个Swing应用程序,我经常想要替换JPanel的内容。为此,我打电话给removeAll(),然后添加我的新内容,然后调用revalidate()
但是,我发现旧内容仍然可见(虽然被新内容所掩盖)。除了revalidate()之外,如果我添加了repaint()的呼叫,则会按预期方式工作。
我确信在我遇到的其他情况下,只要调用revalidate()即可。
所以基本上我的问题是 – 我是否需要调用这两个函数,如果不是,我应该何时调用它们?

回答:

您需要调用repaint()revalidate()。前者告诉Swing窗口的一个区域是脏的(这是删除removeAll()删除的旧孩子的图像所必需的);后者告诉布局管理器重新计算布局(添加组件时是必需的)。这应该导致面板的children重新绘制,但可能不会导致面板本身这样做(参见this重绘触发列表)。
在一个更一般的注意事项:而不是重用原始面板,我建议建立一个新的面板,并交换他们在父母。

 
 
Code问答: http://codewenda.com/topics/python/
Stackoverflow: Java Swing revalidate() vs repaint()

*转载请注明本文链接以及stackoverflow的英文链接

发表评论

电子邮件地址不会被公开。 必填项已用*标注

75 − 72 =