我正在整理一个Swing应用程序,我常常想要替换JPanel的内容.要做到这一点,我正在打电话removeAll()
,然后添加我的新内容,然后打电话revalidate()
.
但是我发现旧内容仍然可见(虽然被新内容遮挡了).如果我添加调用repaint()
除revalidate()
,它按预期工作.
我确信在其他场合我经历过只是打电话revalidate()
就足够了.
所以基本上我的问题是 - 我是否需要调用这两个函数,如果没有,我什么时候应该调用它们?
Noe*_*din 84
每次执行remove()或removeAll()时,都应该调用
validate();
repaint();
Run Code Online (Sandbox Code Playgroud)
完成add()后的新组件后.
执行remove()时,必须调用validate()或revalidate() - 请参阅相关的javadoc.
我自己的测试表明repaint()也是必要的.我不确定为什么.
akf*_*akf 58
revalidate
在添加新组件或删除旧组件后,在容器上调用.此调用是指示布局管理器根据新组件列表重置的指令. revalidate
将触发调用以重新绘制组件认为"脏区域"的内容.显然,并非你所有的地区JPanel
都被认为是肮脏的RepaintManager
.
repaint
用于告诉组件重绘自己.通常情况下,您需要调用此方法来清理诸如您的条件.
revalidate()
只是请求布局容器,当您遇到简单的调用revalidate()
工作时,可能是由于repaint()
在重新布局期间更改了子组件的边界时触发了子组件边界的更新。在您提到的情况下,仅删除了组件而没有更改组件边界,这种情况repaint()
是“意外”触发的。
归档时间: |
|
查看次数: |
207168 次 |
最近记录: |