gpt4 book ai didi

Java Swing revalidate() 与 repaint()

转载 作者:IT老高 更新时间:2023-10-28 12:16:40 26 4
gpt4 key购买 nike

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

但是,我发现旧内容实际上仍然可见(尽管被新内容遮盖了)。如果我在 revalidate() 之外添加对 repaint() 的调用,它会按预期工作。

我敢肯定,在其他情况下,只要调用 revalidate() 就足够了。

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

最佳答案

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

更笼统地说:与其重复使用原始面板,我建议构建一个新面板并在父面板上交换它们。

关于Java Swing revalidate() 与 repaint(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1097366/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com