2013-12-14 5 views
0

Я использую CardLayout для переключения между двумя окнами. В первом окне отображается информация, а второе окно редактирует информацию и сохраняет ее. То, как я обновляю информацию, создает новый JPanel каждый раз, когда я нажимаю «Редактировать» или «Сохранить». Однако я хочу удалить старую панель, которая была создана. Я пыталсяCardLayout удаляет старые панели при обновлении информации

containerPanel.remove(0), 

, а также

Component c = containerPanel.getComponent(0) 
cardlayout.removeLayoutComponent(c); 

, но ничего, кажется, работает, когда я перебирать JPanel и проверить, сколько компонентов есть. Меня это раздражало долгое время, и я действительно застрял.

+0

Почему не просто сбросить состояние панели (т.е. повторно Семя его значения каждый раз, когда он отображается)? – MadProgrammer

+0

Что вы подразумеваете под этим? – Aire

+0

Повторно создайте свое «состояние панели», чтобы оно содержало только компоненты, которые вы хотели бы видеть. – Tdorno

ответ

0

При инициализации JPanel (или любого компонента), который вы хотите удалить позже, храните ссылку на него с помощью переменной. Затем вы сможете позвонить superComponent.remove(subComponent), чтобы удалить его. При необходимости вы можете продолжить шаблон, установив переменную, содержащую старый компонент, в новую.

Например:

JPanel containerPanel = new JPanel(); 

JPanel subPanel = new JPanel(); // Store a reference to the first panel. 
containerPanel.add(subPanel); 
containerPanel.remove(subPanel); // Remove the panel like so. 

subPanel = new JPanel(); // Set subPanel to the new panel. 
containerPanel.add(subPanel); 
containerPanel.remove(subPanel); // Repeat as needed. 
Смежные вопросы