O código que você postou só está criando o JPanel e adicionando ao panelPrincipal. O que precisa ser feito é utilizar os métodos de navegação. Mais ou menos assim:
1 - Cria um JPanel e seta o layout como CardLayout:
JPanel pnlCard; // variável de instância
// Método getter que inicializa o painel caso necessário
private void getPnlCard() {
if (pnlCard == null) {
pnlCard = new JPanel();
pnlCard.setLayout(new CardLayout);
JPanel pnlCarregarCliente = new CarregarCliente(); // cria o seu painel
pnlCard.add(pnlCarregarCliente, "panelCarregarCliente"); // adiciona o painel, e passa o nome como segundo parâmetro
JPanel pnlSalvarCliente = new SalvarCliente(); // cria o seu outro painel
pnlCard.add(pnlSalvarCliente, "panelSalvarCliente");
}
return pnlCard;
}
2 - Adiciona o painel no JFrame:
getContentPane().add(getPnlCard()); // Este código vai no construtor
3 - Os eventos dos botões vão apenas chamar os métodos de navegação:
private void btnCarregarClienteActionPerformed(java.awt.event.ActionEvent evt) {
((CardLayout) getPnlCard().getLayout()).show(getPnlCard(), "panelCarregarCliente");
}
private void btnSalvarClienteActionPerformed(java.awt.event.ActionEvent evt) {
((CardLayout) getPnlCard().getLayout()).show(getPnlCard(), "panelSalvarCliente");
}
Perceba que os paineis são criados e adicionados apenas uma vez. Nos eventos dos botões, ocorre apenas a mudança do card que deve ser exibido, tudo gerenciado pelo CardLayout, sem necessidade de setVisible, repaint e afins.