gpt4 book ai didi

Java swing区别remove和removeAll

转载 作者:行者123 更新时间:2023-12-01 23:52:59 25 4
gpt4 key购买 nike

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);
}
}

然后一切都完全按照预期进行。当我更改删除语句中的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时却消失?

最佳答案

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

对于Container.remove(Component) :

"Removes the specified component from this container."

对于Container.removeAll() :

"Removes all the components from this container."

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

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

关于Java swing区别remove和removeAll,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16085948/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com