Вы можете в любое время превратить любой объект-контейнер в ContentPane JFrame. Вы также можете добавлять и удалять контейнеры из любого другого контейнера. Если вы хотите, чтобы пользователь мог в любой момент перейти к любой из дюжины панелей, CardLayout, как предлагается в другом ответе, - это, пожалуй, лучший маршрут. Однако, если вы намереваетесь провести пользователя по несколько контролируемому пути, вы можете начать с входа в систему JPanel. Когда это будет сделано, вы можете создать следующую панель (JPanel или что-то еще), добавить ее и избавиться от первой. И так до тех пор, пока пользователь не выйдет.
Если переход с одной панели на другую не влияет ни на что другое в программе, кроме двух панелей и родительского контейнера (JFrame или его потомка), это, вероятно, путь. Если куча других мест в программе должна знать об изменениях, вам нужен более централизованный механизм, возможно, с использованием CardLayout.