java swing库中的remove和removeAll之间有什么区别?
我有一个控制面板和一个可以通过控制面板更改的面板。
此更改是在父框架对象中完成的。
当我使用代码时:
public void showNextPanel(){
if(hasNextPanel()){
getSelectedPanel().setVisible(false);
getContentPane().removeAll();
getContentPane().add(controlPanel);
selectedPanel++;
getContentPane().add(getSelectedPanel());
getSelectedPanel().setVisible(true);
revalidate();
repaint();
}else{
System.exit(0);
}
}
然后,一切都会按预期工作。当我在remove语句中更改removeAll时,此选定的面板变为灰色,但仍可见。调整框架大小时,新框架可见,您可以看到它隐藏在先前选择的面板后面。然后我的代码是:
public void showNextPanel(){
if(hasNextPanel()){
getSelectedPanel().setVisible(false);
getContentPane().remove(getSelectedPanel());
selectedPanel++;
getContentPane().add(getSelectedPanel());
getSelectedPanel().setVisible(true);
revalidate();
repaint();
}else{
System.exit(0);
}
}
为什么在使用removeAll时我的JPanel消失,而在使用remove时却不消失?
最佳答案
方法名称是一个很大的提示,而最终的答案在javadocs中:
对于Container.remove(Component)
:
“从此容器中删除指定的组件。”
对于Container.removeAll()
:
“从此容器中删除所有组件。”
至于是什么导致了行为上的差异,我的猜测是在第一种情况下面板中还有一些其他组件被删除,而在第二种情况下则没有。
在两种情况下,请尝试在“删除”之后调用并记录/打印getComponentCount()
。
关于java - Java Swing差异remove和removeAll,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16085948/