【问题标题】:How to remove all components from a JFrame in Java?如何从 Java 中的 JFrame 中删除所有组件?
【发布时间】:2012-03-09 23:08:15
【问题描述】:

我正在编写一个程序,其中有一个 JFrame,我想从中删除所有组件,然后只添加一个组件并重新绘制框架。到目前为止,我所拥有的是类似于下面的代码(在实现 JFrame 的对象中调用,其中 StartPanel 实现 JPanel):

removeAll();    
startPanel = new StartPanel();
startPanel.setVisible(true);
add(startPanel);
revalidate();
repaint();

但是,当我运行代码时,它会显示一个空窗口(不是 startPanel),当我最小化/调整窗口大小时,窗口会变黑。如果我省略了removeAll() 并且 JFrame 上还没有元素,它会很好地显示 startPanel。关于如何实际删除所有内容,然后让新面板仍然显示的任何想法?

【问题讨论】:

  • 一句话:CardLayout
  • @HovercraftFullOfEels 可能有效,但还有其他方法可以手动完成吗?为什么 removeAll() 没有像我认为的那样工作?如果在代码的其他部分我需要一些不同组件的组合(不只是一次显示一个),所以我不想要 CardLayout 怎么办?

标签: java swing jframe repaint removeall


【解决方案1】:

你必须打电话

 private JFrame frame = new JFrame();
 ...
 ...
 frame.getContentPane().removeAll();
 frame.repaint();

removeAll() 未被覆盖为add()remove() 以根据需要转发到contentPane

【讨论】:

  • @scae:Kavka 的眼睛似乎比我们其他人更敏锐。不错的收获和 1+。
  • 感谢您简洁而有帮助的回答。 removeAll() 真的应该像 add()remove() 你描述的那样被覆盖。只是 Java 的另一个奇怪的怪癖......
  • 如原始问题所示,也可能需要调用revalidate(),但在此答案中不需要。如果您稍后向 JFrame 添加其他内容,则必须调用 revalidate()。我知道这不是最初的问题,但我相信这是一个足够常见的用例,可以在这里注意到它。因为这是我的用例,所以我在 Google 搜索中找到了这个问题/答案。
【解决方案2】:

假设您的目标是在之后添加其他内容 你清除你应该调用验证的框架 添加这些组件来更新它

getContentPane().removeAll();
add(new component);
validate();

【讨论】:

    【解决方案3】:
    getContentPane().removeAll();
    getContentPane().repaint();
    

    【讨论】:

      猜你喜欢
      • 2013-07-26
      • 1970-01-01
      • 2011-01-30
      • 1970-01-01
      • 1970-01-01
      • 2022-08-14
      • 2012-06-22
      • 1970-01-01
      相关资源
      最近更新 更多