Impedir a repetição da letra e realizar a repetição usando Java swing

Olá pessoal, espero que possam me ajudar, estou montando um jogo da força do desafio 7 do Caelum, mas não estou conseguindo impedir que a letra possa ser repetida e nem a possibilidade de montar um loop para jogar novamente. Segue o código:

import java.util.ArrayList;
import java.util.Random;

import javax.swing.JOptionPane;
public class Telajogo {
private static String palavra =null;
private String dica = null;

public Telajogo (int n) {
	
palavra = new Dicionario().getPalavra(n);
dica = new Dicionario().getDica(n);
	
	
}

public static void main(String[] args){

	
	
	

	Random r = new Random();
	int random = r.nextInt((10 -1) + 1) +1;
	
	
	
boolean acertou = false;

ArrayList<String> letraIdentica = new ArrayList<String>();
int qtd=0;
int contarErros = 0;
String senha, tenta;
String boneco = "\0";
Telajogo jogo = new Telajogo(random);
String v = Telajogo.palavra;
char[] formarPalavra = palavra.toCharArray();
String apresentaPalavra="\0";
for(int y = 0; y < formarPalavra.length; y++){
formarPalavra[y] = '_';
apresentaPalavra += formarPalavra[y] + " ";
}


JOptionPane.showMessageDialog(null," Inicio do Jogo  \n");
for(int j = 0; j <formarPalavra.length + 7 ; j++) 
{
acertou = false;
senha = JOptionPane.showInputDialog(null,"Tentativa: " + (j+1) + " de " +
(formarPalavra.length + 7) + "\n" + apresentaPalavra + "\nDigite a letra:");
apresentaPalavra= "\0";
for(int i = 0; i < formarPalavra.length; i++)
{
tenta = v.substring(i,i+1);
if(senha.trim().equalsIgnoreCase(tenta))
{
	letraIdentica.add(senha);
	if(!letraIdentica.contains(senha)) {JOptionPane.showMessageDialog(null," já possui a letra  \n");
	} else 
		
acertou = true;
qtd++;
formarPalavra[i] = senha.charAt(0);
 apresentaPalavra = apresentaPalavra + formarPalavra[i] + " ";
if (qtd == formarPalavra.length)
{
JOptionPane.showMessageDialog(null, "Você Ganhou! PalavraCompleta: " + v + "\nTotal de Tentativas: " + (j+1) );
System.exit(0);
}
}else
{
apresentaPalavra += formarPalavra[i] + " ";
}
}
if(acertou == false){
contarErros++;
boneco = "\0";
switch(contarErros)
{
case 1: 
boneco = "  __ O \n";
boneco += "|\t \n";
boneco += "|\t \n";
boneco += "|\t \n";
break;
case 2:
boneco = "  __  O \n";
boneco += "|        | \n";
boneco += "|\n";
boneco += "|\n";
break;
case 3:
boneco = "  __  O \n";
boneco += "|       -|\n";
boneco += "|\n";
boneco += "|\n";
break;
case 4:
boneco = "  __  O \n";
boneco += "|       -|-\n";
boneco += "|        \n";
boneco += "|\n";
break;
case 5:
boneco = "  __  O \n";
boneco += "|       -|-\n";
boneco += "|       |   \n";
boneco += "|        \n";
break;
case 6: boneco = "Dica: " + jogo.dica+"\n\n";
boneco += "  __  O \n";
boneco += "|       -|-\n";
boneco += "|       |   \n";
boneco += "|        \n";
break;
case 7:
boneco = "  __  O \n";
boneco += "|       -|-\n";
boneco += "|       |  | \n";
boneco += "|        \n";
break;
}
JOptionPane.showMessageDialog(null, boneco + "\nVocê ERROU " +
contarErros + " vez(es)");
if(contarErros>= 7)
{
JOptionPane.showMessageDialog(null, "PERDEU! FIM DO JOGO" );

System.exit(0);


} 
}


}
	
}
}