При удалении / добавлении компонентов на панель вы должны использовать:
panel.remove(...);
panel.add(...);
panel.revalidate();
panel.repaint();
То есть вы должны использовать revalidate () вместо validate (), и вам нужно вызывать код только один раз после внесения всех изменений в панель.
элемент changeableContentPanel расширен.
Да, поскольку вызывается диспетчер компоновки, и размер панели будет пересчитан на основе размера компонента, добавленного на панель.
Может ли кто-нибудь мне помочь?
Если вы не хотите, чтобы размер изменялся, вы должны использовать CardLayout
на вашей панели. Размер панели будет фиксирован по размеру самой большой карты, добавленной на панель. Тогда вы просто меняете компоненты.
Прочтите раздел из учебника по Swing на Как использовать CardLayout для получения дополнительной информации и рабочих примеров.