Problème d'affichage JLabel dans JLayeredPane

Fermé
Akasha2509 - 12 juil. 2010 à 13:28
Bonjour,
Je suis en train d'essayer de faire un cluedo en Java et j'ai un problème au niveau de l'affichage des cases où le joueur peut se déplacer.

J'ai un plateau de jeu (qui est une image que j'ai insérer avec un layeredPane dans un JLabel, et par dessus j'affiche des JLabel avec un fond coloré, ce qui représente les cases dans lesquelles le joueur peut aller en fonction de ses résultats aux dés.
Lorsque le joueur clic sur une de ces cases, les labels disparaissent et le pion du joueur se "déplace".

Lors du premier tour de jeu tout se passe bien. Mais au second tour, les JLabels des cases, qui étaient cliquables au premier tour de jeu, n'apparaissent pas. Cependant je sais qu'elles sont cliquables parce que j'ai créer dans la classe Case un booleen qui me dit, si oui ou non, la case est cliquable.

La fonction clique est appelée lorsque le joueur clic sur une des cases colorées :

public void clique(int x, int y)
{
	//on recupere la case dans laquelle on a clique parmi la liste des cases cliquables
	Case case0 = caseCourante(listeCasesCliquables, x, y);
	int indice = Main.getIndiceJoueur();
	
	if(case0 != null)
	{
		//on remet les cases en non cliquables et on vide la liste
		for(int i = 0; i < listeCasesCliquables.size(); i++)
		{
			listeCasesCliquables.get(i).getListeLblCliquables().get(indice).setIcon(null);
			listeCasesCliquables.get(i).setCliquable(false);
		}
		listeCasesCliquables.clear();
		
		Case ancienneCase = Main.getJoueurCourant().getCaseCourante();
		
		//on dessine le pion dans la nouvelle case
		Main.getJoueurCourant().setCaseCourante(case0);
		Main.interf.deplacerPion(ancienneCase);
	}
}



La fonction afficheCasesPossibles est appelée une fois que les dés ont été lancés.

public void afficheCasesPossibles(int valeurDes, Case caseCourante)
{
	int indice = Main.getIndiceJoueur();
	
	//creation de la liste des listes de voisins en fonction de la profondeur
	ArrayList<ArrayList<Case>> liste = new ArrayList<ArrayList<Case>>();
	for(int i = 0; i < valeurDes; i++)
	{
		ArrayList<Case> listeCases = new ArrayList<Case>();
		liste.add(listeCases);
	}
	
	//remplissage de la liste des premiers voisins de la case courante
	for(int i = 0; i < caseCourante.getListeVoisins().size(); i++)
	{
		liste.get(0).add(caseCourante.getListeVoisins().get(i));
	}

	//remplissage des autres listes de voisins
	for(int i = 1; i < valeurDes; i++)
	{
		//i est le niveau dans l'arbre
		parcourtListe(liste, i);
	}
	
	//affichage des cases sur le plateau
	
	//pour toutes les cases de la derniere liste
	for(int i = 0; i < liste.get(valeurDes - 1).size(); i++)
	{
		Case casePlateau = liste.get(valeurDes - 1).get(i);
		JLabel lbl = casePlateau.getListeLblCliquables().get(indice);
		
		//si c'est une case simple
		if(!Main.interf.estSalle(casePlateau))
		{
			//verification s'il y a qqn dans la case
			boolean bool = false;
			for(int j = 0; j < Main.listeJoueurs.size(); j++)
			{
				JLabel lbl2 = casePlateau.getListeLblCliquables().get(j);
				if(lbl2.getIcon() != null)
				{
					bool = true;
					System.out.println("la case "+casePlateau.getName()+" est occupée");
				}
			}
			
			//s'il n'y a personne dans la case
			if(bool == false)
			{
				//et si la case n'est pas deja dans la liste des cases cliquables
				//utile pour le complement des cases avec valeur des des - 1
				if(!listeCasesCliquables.contains(casePlateau))
				{
					//on ajoute la case a la liste des cases cliquables
					listeCasesCliquables.add(casePlateau);
					
					ImageIcon casePossible = new ImageIcon("Img/case.jpg");
					int x = casePlateau.getX11();
					int y = casePlateau.getY11();
					lbl.setIcon(casePossible);
					lbl.setSize(casePossible.getIconWidth(), casePossible.getIconHeight());
					lbl.setLocation(x, y);
					
					//on affiche la case
					Main.plateau.getLayeredPane().add(lbl, JLayeredPane.PALETTE_LAYER);
					//Main.plateau.repaint();
					
					//on la declare cliquable
					casePlateau.setCliquable(true);
				}
			}
		}
		//si la case est une salle
		else
		{
			//si le joueur n'est pas deja dans la salle
			if(lbl.getIcon() == null)
			{
				//et si la case n'est pas deja dans la liste des cases cliquables
				//utile pour le complement des cases avec valeur des des - 1
				if(!listeCasesCliquables.contains(casePlateau))
				{
					//on ajoute la case a la liste des cases cliquables
					listeCasesCliquables.add(casePlateau);
					
					ImageIcon casePossible = new ImageIcon("Img/case.jpg");
					int x = casePlateau.getX11() + Main.getJoueurCourant().getPerso().getxSalle();
					int y = casePlateau.getY11() + Main.getJoueurCourant().getPerso().getySalle();
					lbl.setIcon(casePossible);
					lbl.setSize(casePossible.getIconWidth(), casePossible.getIconHeight());
					lbl.setLocation(x, y);
					
					//on affiche la case
					Main.plateau.getLayeredPane().add(lbl, JLayeredPane.PALETTE_LAYER);
					//Main.plateau.repaint();
					
					//on la declare cliquable
					casePlateau.setCliquable(true);
				}
			}
		}
	}
}



public void parcourtListe(ArrayList<ArrayList<Case>> liste, int indice)
{
	//pour toutes les cases de la liste (indice - 1)
	for(int i = 0; i < liste.get(indice - 1).size(); i++)
	{
		//pour tous les voisins de la case i
		for(int j = 0; j < liste.get(indice - 1).get(i).getListeVoisins().size(); j ++)
		{
			//on parcourt la liste pour verifier si la case n'existe pas deja dans la liste
			boolean bool = false;
			for(int k = 0; k < liste.get(indice).size(); k++)
			{
				if(liste.get(indice).get(k).getName() == liste.get(indice - 1).get(i).getListeVoisins().get(j).getName())
				{
					bool = true;
				}
			}
			if(!bool)
			{//si elle n'y est pas, on l'ajoute
				liste.get(indice).add(liste.get(indice - 1).get(i).getListeVoisins().get(j));
			}
		}
	}
}