在java swing库中remove和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()的工作方式与removeAll不同。任何你不应该使用remove()或removeAll()。而是使用'CardLayout'来为你管理这个功能。 – camickr