【发布时间】:2012-12-26 08:16:03
【问题描述】:
我有一个相对较小的类,叫做“LoadingWindow”,这个类有一个构造函数,它调用一个 Initialize 函数来设置框架。不是我在测试一些东西来试图解决为什么它不会更新。在测试时我添加了“this.removeAll();”到初始化方法的头部。事实证明,在那之后我不能添加任何东西。我添加的任何内容都不会显示。
这是一个略微精简的课程:
public class LoadingWindow extends JFrame{
public JPanel panel;
public JProgressBar bar;
private JLabel label;
public LoadingWindow()
{
this.Initialize();
}
public void Initialize()
{
this.removeAll();
this.setSize(300, 150);
panel = new JPanel(new BorderLayout());
bar = new JProgressBar(0,100);
label = new JLabel("Please remain calm, we're just loading...");
panel.add(bar,BorderLayout.CENTER);
panel.add(label,BorderLayout.SOUTH);
this.add(panel);
this.validate();
this.repaint();
this.setVisible(true);
}
}
窗口本身确实会正确弹出,并带有标题。但是窗口本身是完全空白的。
我静态实现这个类,以便其他四个对象可以在 EditorPanel 类中访问它。其定义为:
public static LoadingWindow loadingWindow;
并在构造函数中初始化:
loadingWindow = new LoadingWindow();
然后在使用它的函数中进行双重检查,以显示它是否隐藏。
if(!EditorPanel.loadingWindow.isVisible()){EditorPanel.loadingWindow.Initialize();}
总的来说,我对为什么没有显示内容感到有些困惑,我对提出的任何问题都非常感兴趣,并且愿意提供任何必要的信息。谷歌没有提供很多,我发现的每个答案我都已经实现了“例如重绘和验证”。
期待您的回音!
~特拉维斯
【问题讨论】:
-
注意,不要调用
JFrame.removeAll(),结果可能是删除RootPane,空容器只有Toolbar和Borders,改用JFrame.getContentPane().removeAll()
标签: java swing jframe add removeall