Java swing差异删除和删除所有

时间:2013-04-18 14:38:24

标签: java swing removeall

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时不会消失?

1 个答案:

答案 0 :(得分:3)

方法名称是一个很大的提示,明确的答案在javadocs中:

Container.remove(Component)

  

“从此容器中删除指定的组件。”

Container.removeAll()

  

“从此容器中删除所有组件。”

至于造成行为差异的原因,我的猜测是面板中有一些其他组件在第一种情况下被删除,但在第二种情况下没有被删除。

在两种情况下,请在“删除”之后尝试呼叫并记录/打印getComponentCount()