我有一个 JPanel,其中包含具有不同 GUI 组件的其他面板,包括带有动作侦听器的按钮。在某些时候,我想删除一些组件并添加新组件。所以我尝试删除主 JPanel 上的所有组件,然后添加新组件。当我运行该removeAll()
方法时,出现堆栈溢出错误。我也尝试一次删除一个组件,但我仍然遇到这个问题。还尝试了使用 in/re/validate 的不同组合,但未删除旧组件。这是我最后尝试的:
public void updateSuites() {
removeAll();
//for(int i = 0; i < getComponentCount(); i++)
//remove(getComponent(i));
invalidate();
showGui();
revalidate();
repaint();
}
这里有什么问题?
编辑:
所以这里又是代码:
public void updateSuites() {
for(int i = 0; i < getComponentCount(); i++)
if(!(getComponent(i) instanceof ControlPanel))
remove(getComponent(i));
invalidate();
showGui();
revalidate();
repaint();
}
我有一个扩展 JPanel 的类,并且上面有更多面板和组件。我还有一个 ControlPanel,上面有一些按钮和东西。所以想法是,当按下 ControlPanel 上的按钮时,它会在父面板上调用此方法,该方法应该删除除 ControlPanel 本身之外的所有内容(来自调用的来源)。但我得到堆栈溢出:
Exception in thread "AWT-EventQueue-0" java.lang.StackOverflowError
at java.awt.AWTEventMulticaster.remove(Unknown Source)
at java.awt.AWTEventMulticaster.removeInternal(Unknown Source)
at java.awt.AWTEventMulticaster.remove(Unknown Source)
at java.awt.AWTEventMulticaster.removeInternal(Unknown Source)
at java.awt.AWTEventMulticaster.remove(Unknown Source)
at java.awt.AWTEventMulticaster.removeInternal(Unknown Source)
at java.awt.AWTEventMulticaster.remove(Unknown Source)
at java.awt.AWTEventMulticaster.removeInternal(Unknown Source)
编辑2:
我做了一些调试,发现了以下内容:我有一个 JPanel 数组,它们被添加到当前面板上。因此,删除数组 JPanel 的子项不是问题,但是当我尝试删除数组 JPanel 时会出现问题。代码看起来像这样:
for(int i = 0; i < panels.length; i++) {
panels[i] = new JPanel();
// add components to panels[i]
add(panels[i]);
}
所以如果我跑
for(int i = 0; i < panels.length; i++) {
remove(panels[i]);
}
我得到堆栈溢出错误。