Atualizando um JFrame

Fala galera, é o seguinte:
tenho um JFrame em que insiro um JPanel, que desenha uma matriz na tela, um JLabel, indicando o nome do usuário mexe nessa matriz, e um JButton que, quando clicado, remove todos os componentes da tela e desenha a matriz de outro usuário.

O problema é que quando clico no botão, ele nao apaga os componentes anteriores do JFrame e imprime uma matriz por cima da outra, um Label por cima de outro, etc.

Map é minha classe que extende JPanel para poder imprimir a matriz na tela através do paintComponent()

Segue o código:

Map mapa = new Map();

private JButton button = new JButton("Proximo");

private void player1Screen() {
		mapa.draw(map1, screenX / 2 + 30, screenY / 10);
		getContentPane().add(mapa);

		mapa.setLayout(null);

		JLabel text = new JLabel(name1);
		mapa.add(text);
		text.setBounds(screenX / 2 - 175, screenY - 200, 350, 40);

		mapa.add(button);
		button.setBounds(screenX / 2 - 150, screenY - 170, 200, 30);
		button.addActionListener(this);
	}
	
	private void player2Screen(){
		getContentPane().removeAll();
		
		mapa.draw(map2, screenX / 2 + 30, screenY / 10);
		getContentPane().add(mapa);

		mapa.setLayout(null);
		
		button = new JButton("Proximo");

		JLabel text = new JLabel(name2);
		mapa.add(text);
		text.setBounds(screenX / 2 - 175, screenY - 200, 350, 40);

		mapa.add(button);
		button.setBounds(screenX / 2 - 150, screenY - 170, 200, 30);
		button.addActionListener(this);
		
		getContentPane().validate();
		getContentPane().repaint();
	}

Olá @Pedro_Augusto , tenta dá um :

getContentPane().repaint(); 
getContentPane().revalidate(); 

depois de remover os componentes da tela eu presumo que seja depois desta linha

    getContentPane().removeAll();
    //inserir
    getContentPane().repaint(); 
    getContentPane().revalidate();

Fiz isso e continuou com o mesmo problema =/

Se você estiver herdando a classe JFrame faz assim

   getContentPane().removeAll();
   revalidate();
   repaint();

continua o mesmo problema …

Manda seu projeto zipado para eu vê aqui, por que essa é a forma correta de limpar o container, acredito que vc esteja fazendo algo errado

Recomendo que para cada usuário tenha um JPanel pronto e a cada instante que muda de usuario, troca apenas as JPanels

Exemplo

JPanel screen1 = construirScreen(usuario1);
JPanel screen2 = construirScreen(usuario2);

private void player1Screen() {
  getContentPane().remove(screen2);
  getContentPane().add(screen1);
}

private void player2Screen() {
  getContentPane().remove(screen1);
  getContentPane().add(screen2);
}