在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