JavaスイングライブラリのremoveとremoveAllの違いは何ですか? 1 つのコントロール パネルと、コントロール パネルで変更できるパネルがあります。この変更は、親フレーム オブジェクトで行われます。コードを使用する場合:
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 を使用すると消えないのはなぜですか?