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);
}
}
为什么我的JPanel在使用removeAll时会消失,但在使用remove时不会消失?
答案 0 :(得分:3)
方法名称是一个很大的提示,明确的答案在javadocs中:
“从此容器中删除指定的组件。”
“从此容器中删除所有组件。”
至于造成行为差异的原因,我的猜测是面板中有一些其他组件在第一种情况下被删除,但在第二种情况下没有被删除。
在两种情况下,请在“删除”之后尝试呼叫并记录/打印getComponentCount()
。