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/

10-12 02:11