В чем разница между remove and removeAll в библиотеке java swing? У меня есть одна панель управления и панель, которую можно изменить с помощью панели управления. Это изменение выполняется в родительском объекте кадра. Когда я использую код:Java swing difference remove and 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 в инструкции remove, эта выбранная панель становится серой, но все же видимой. При изменении размера моего кадра новый кадр видим, вы можете видеть, что он скрывается за предыдущей выбранной панелью. Тогда мой код:
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?
Не могу сказать, что происходит на основе нескольких строк кода. Из первого примера видно, что у вас несколько панелей. Поэтому remove() будет работать иначе, чем removeAll. Любые вы не должны использовать remove() или removeAll(). Вместо этого использование «CardLayout» будет управлять этой возможностью для вас. – camickr