Bonjour à tous,

Je travaille sur un petit projet de panneau d'affichage sportif.
Le but est de pouvoir crée et configurer plusieurs panneau (plusieurs JFrame) à l'aide d'une JFrame de commande.

L'utilisateur peut, avec un bouton "New" sur la JFrame de contrôle, crée autant de panneau sportif qu'il désire cela implique autant de JFrame instanciée.
Chaque JFrame de panneau sportif est référencé simplement de 0 jusqu’à "n".
Grâce à un JComboBox "j'enregistre" tout les références et peut ainsi commander chaque panneau sportif suivant la sélection faite par le JComboBox.

Mon problème est que quand je sélectionne une des JFrame panneau sportif à l'aide du JComboBox tout les autres JFrame panneau sportif s'arrêt de fonctionner:
-Les thread de comptage ce stop.
-L'affichage n'est à priori plus rafraîchis.
Il y'a plus que la JFrame panneau sportif sélectionnée qui fonctionne.

Pour réaliser cela j'utilise 4 classes, la plus importante pour le moment étant "JPanelCommandePHB".
Le code est assez brouillon je m'en excuse d'avance.


JPanelCommandePHB:
Code:
package paneauaffichagehandball.commande;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.HashMap;
import java.util.Map;

import javax.swing.Box;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JPanel;

import paneauaffichagehandball.affichage.JFrameAffichagePHB;
import paneauaffichagehandball.utilitaire.bouton.JButtonPHB;

public class JPanelCommandePHB extends JPanel
	{

	/*------------------------------------------------------------------*\
	|*			Constructeurs							*|
	\*------------------------------------------------------------------*/
	public JPanelCommandePHB()
		{
		//		this.miliseconde = 0;
		this.tabTime = new int[3];
		this.numRef = 0;
		this.mapJFrameAffichagePHB = new HashMap<Integer, JFrameAffichagePHB>();
		this.mapThreadChronos = new HashMap<Integer, Thread>();
		this.mapStateRunThread = new HashMap<Integer, Boolean>();
		this.mapTimeMiliseconde = new HashMap<Integer, Integer>();

		geometry();
		controle();
		apparance();

		//		refresh();
		}

	/*------------------------------------------------------------------*\
	|*			Methodes Public							*|
	\*------------------------------------------------------------------*/

	/*------------------------------*\
	|*		Set			      *|
	\*------------------------------*/

	/*------------------------------*\
	|*	Get				     *|
	\*------------------------------*/

	/*------------------------------------------------------------------*\
	|*			Methodes Private						*|
	\*------------------------------------------------------------------*/
	private void apparance()
		{
		this.setBackground(Color.BLACK);
		}

	private void controle()
		{
		this.jButtonNew.addActionListener(new ActionListener()
			{

				@Override
				public void actionPerformed(ActionEvent e)
					{
					System.out.println("(JButtonNew ActionListener) state numeRef: " + JPanelCommandePHB.this.numRef);

					JPanelCommandePHB.this.jComboBoxRef.addItem(JPanelCommandePHB.this.numRef);
					JPanelCommandePHB.this.mapJFrameAffichagePHB.put(JPanelCommandePHB.this.numRef, new JFrameAffichagePHB(JPanelCommandePHB.this.numRef));
					JPanelCommandePHB.this.creatChronos();
					JPanelCommandePHB.this.numRef++;
					}
			});

		this.jComboBoxRef.addActionListener(new ActionListener()
			{

				@Override
				public void actionPerformed(ActionEvent e)
					{
					JPanelCommandePHB.this.actualRef = JPanelCommandePHB.this.jComboBoxRef.getSelectedIndex();
					System.out.println("(JComboBox ActionListener) actual reference: " + JPanelCommandePHB.this.actualRef);
					System.out.println("(JComboBox ActionListener) contenance mapStateRunThread: " + JPanelCommandePHB.this.mapStateRunThread);

					if (JPanelCommandePHB.this.actualRef >= 0 && JPanelCommandePHB.this.mapStateRunThread.size() > 0)
						{
						if (JPanelCommandePHB.this.mapStateRunThread.get(JPanelCommandePHB.this.actualRef) == true)
							{
							JPanelCommandePHB.this.jButtonStartPHB.setTitle("Stop");
							}
						else
							{
							JPanelCommandePHB.this.jButtonStartPHB.setTitle("Start");
							}
						}
					}
			});

		this.jButtonStartPHB.getJPanelButtonPHB().addMouseListener(new MouseListener()
			{

				@Override
				public void mouseReleased(MouseEvent e)
					{
					// TODO Auto-generated method stub

					}

				@Override
				public void mousePressed(MouseEvent e)
					{
					// TODO Auto-generated method stub

					}

				@Override
				public void mouseExited(MouseEvent e)
					{
					// TODO Auto-generated method stub

					}

				@Override
				public void mouseEntered(MouseEvent e)
					{
					// TODO Auto-generated method stub

					}

				@Override
				public void mouseClicked(MouseEvent e)
					{
					JPanelCommandePHB.this.actualRef = JPanelCommandePHB.this.jComboBoxRef.getSelectedIndex();

					if (JPanelCommandePHB.this.actualRef >= 0)
						{
						if (JPanelCommandePHB.this.mapStateRunThread.get(JPanelCommandePHB.this.actualRef) == false)
							{
							JPanelCommandePHB.this.jButtonStartPHB.setTitle("Stop");

							//							JPanelCommandePHB.this.listThreadChronos.get(JPanelCommandePHB.this.actualRef).start();
							JPanelCommandePHB.this.startChronos();
							}
						else
							{
							JPanelCommandePHB.this.jButtonStartPHB.setTitle("Start");

							//							JPanelCommandePHB.this.listThreadChronos.get(JPanelCommandePHB.this.actualRef).stop();
							JPanelCommandePHB.this.stopChronos();
							}
						}
					}
			});

		}

	private void geometry()
		{
		this.setLayout(new BorderLayout());

		this.jButtonStartPHB = new JButtonPHB();
		this.jButtonNew = new JButton("New");
		this.jComboBoxRef = new JComboBox<Integer>();
		Box boxH = Box.createHorizontalBox();

		this.jButtonStartPHB.setSizeButton(100, 40);
		this.jButtonStartPHB.setTitle("Start");

		boxH.add(Box.createHorizontalGlue());
		boxH.add(this.jButtonNew);
		boxH.add(Box.createHorizontalGlue());
		boxH.add(this.jButtonStartPHB);
		boxH.add(Box.createHorizontalGlue());
		boxH.setOpaque(false);

		//		this.setOpaque(false);

		this.add(this.jComboBoxRef, BorderLayout.NORTH);
		this.add(boxH, BorderLayout.CENTER);
		}

	private void timeCalcul(int miliseconde)
		{
		int seconde = 0;
		int minute = 0;

		minute = miliseconde / 6000;
		miliseconde -= (minute * 6000);

		seconde = miliseconde / 100;
		miliseconde -= (seconde * 100);

		//		System.out.println("minute: " + minute);
		//		System.out.println("seconde: " + seconde);

		this.tabTime[0] = minute;
		this.tabTime[1] = seconde;
		this.tabTime[2] = miliseconde;
		}

	private void creatChronos()
		{
		this.mapStateRunThread.put(this.numRef, false);
		this.mapTimeMiliseconde.put(this.numRef, 0);
		//		System.out.println("(Thread) actual state: " + this.mapStateRunThread.get(this.actualRef).booleanValue());
		System.out.println("(Thread) contenance mapStateRunThread: " + this.mapStateRunThread);

		this.mapThreadChronos.put(this.numRef, new Thread(new Runnable()
			{

				@Override
				public void run()
					{
					JPanelCommandePHB.this.actualRef = JPanelCommandePHB.this.jComboBoxRef.getSelectedIndex();
					System.out.println("(Thread) actual reference: " + JPanelCommandePHB.this.actualRef);

					if (JPanelCommandePHB.this.mapJFrameAffichagePHB.size() > 0)
						{
						while(true)
							{
							try
								{
								Thread.sleep(10);
								}
							catch (InterruptedException e)
								{
								System.err.println("sleep fail (10mS)");
								e.printStackTrace();
								}

							if (JPanelCommandePHB.this.mapStateRunThread.get(JPanelCommandePHB.this.actualRef).booleanValue() == true)
								{
								System.out.println("(" + Thread.currentThread().getName() + ") en Run :" + JPanelCommandePHB.this.mapStateRunThread.get(JPanelCommandePHB.this.actualRef));

								//								JPanelCommandePHB.this.miliseconde++;
								int timeMiliseconde = JPanelCommandePHB.this.mapTimeMiliseconde.get(JPanelCommandePHB.this.actualRef);
								timeMiliseconde++;
								JPanelCommandePHB.this.mapTimeMiliseconde.put(JPanelCommandePHB.this.actualRef, timeMiliseconde);
								//						System.out.println("miliseconde: " + JPanelPHB.this.miliseconde++);

								JPanelCommandePHB.this.mapJFrameAffichagePHB.get(JPanelCommandePHB.this.actualRef).getJPanelAffichagePHB().getJPanelDigitPHB().setDigitValueJLabelPHB(timeMiliseconde);

								JPanelCommandePHB.this.timeCalcul(timeMiliseconde);
								//							System.out.println("minutes: " + JPanelCommandePHB.this.tabTime[0] + " Seconde: " + JPanelCommandePHB.this.tabTime[1] + " Miliseconde: " + JPanelCommandePHB.this.tabTime[2]);

								//						JPanelCommandePHB.this.jPanelDigitPHB.setDigitJLabelPHB(JPanelCommandePHB.this.tabTime[0] + "'" + JPanelCommandePHB.this.tabTime[1] + "''" + JPanelCommandePHB.this.tabTime[2]);
								JPanelCommandePHB.this.mapJFrameAffichagePHB.get(JPanelCommandePHB.this.actualRef).getJPanelAffichagePHB().getJPanelDigitPHB().setDigitJLabelPHB(JPanelCommandePHB.this.tabTime[0] + "'" + JPanelCommandePHB.this.tabTime[1] + "''" + JPanelCommandePHB.this.tabTime[2]);

								//							System.out.println("actual reference: " + JPanelCommandePHB.this.actualRef);
								}

							JPanelCommandePHB.this.repaint();
							JPanelCommandePHB.this.validate();
							JPanelCommandePHB.this.mapJFrameAffichagePHB.get(JPanelCommandePHB.this.actualRef).getJPanelAffichagePHB().repaint();
							JPanelCommandePHB.this.mapJFrameAffichagePHB.get(JPanelCommandePHB.this.actualRef).getJPanelAffichagePHB().validate();
							}
						}
					}
			}));
		this.mapThreadChronos.get(this.numRef).start();
		}

	private void startChronos()
		{
		this.actualRef = JPanelCommandePHB.this.jComboBoxRef.getSelectedIndex();
		this.mapStateRunThread.put(this.actualRef, true);
		}

	private void stopChronos()
		{
		this.actualRef = JPanelCommandePHB.this.jComboBoxRef.getSelectedIndex();
		this.mapStateRunThread.put(this.actualRef, false);
		}

	private void refresh()
		{
		Thread thread = new Thread(new Runnable()
			{

				@Override
				public void run()
					{
					while(true)
						{
						//						System.out.println("nombre de Frame d'affichage :" + JPanelCommandePHB.this.listJFrameAffichagePHB.size());
						for(int i = 0; i < JPanelCommandePHB.this.mapJFrameAffichagePHB.size(); i++)
							{
							JPanelCommandePHB.this.mapJFrameAffichagePHB.get(i).repaint();
							JPanelCommandePHB.this.mapJFrameAffichagePHB.get(i).validate();
							JPanelCommandePHB.this.mapJFrameAffichagePHB.get(i).getJPanelAffichagePHB().repaint();
							JPanelCommandePHB.this.mapJFrameAffichagePHB.get(i).getJPanelAffichagePHB().validate();
							}
						try
							{
							Thread.sleep(10);
							}
						catch (InterruptedException e)
							{
							System.err.println("refresh thread sleep 10mS Fail!!!");
							e.printStackTrace();
							}
						}
					}
			});
		thread.start();
		}

	/*------------------------------------------------------------------*\
	|*				Attributs Private						*|
	\*------------------------------------------------------------------*/
	private JButtonPHB jButtonStartPHB;
	private JButton jButtonNew;
	private JComboBox<Integer> jComboBoxRef;

	private Map<Integer, JFrameAffichagePHB> mapJFrameAffichagePHB;
	private Map<Integer, Thread> mapThreadChronos;
	private Map<Integer, Boolean> mapStateRunThread;
	private Map<Integer, Integer> mapTimeMiliseconde;

	//	private int miliseconde;
	private int[] tabTime; //tableau du temps 000minutes 00secondes 000miliseconde -> 000'00''000 -> taille: 3
	private int numRef;
	private int actualRef;
	}

Est-ce que quel qu'un arriverait à me donner des tuyaux et/ou saurait quel est le problème ?

Merci d'avance à tous ceux qui consacreront du temps pour mon problème.