Bonjour à tous voila je réalise en ce moment un projet qui consiste en la création d'un Labyrinthe, et je suis en ce moment bloqué sur l'affichage d'un compteur.

Je crée un plateau héritant d'un JPanel et contenant mes cellules pour la génération du labyrinthe jusque l'à tous va bien. Et ensuite quand je souhaite rajouter un compteur pour donner un temps max au joueur les choses se gatte . Par soucis de mise à jour j'ai deux JPanels le premier affichant mon plateau et s'actualisant à chaque nouveau clic du joueur, et un JPanel pour le compteur qui s'actualise toutes les secondes.

Problème : Je n'arrive pas à superposer les deux JPanel dans ma JFrame. Je souhaite en effet afficher mon compteur sur mon plateau tout en ayant encore le clic souris accessible pour celui ci...

Si quelqu'un avait une idée sur le sujet je suis preneur. J'ai entendu parler de pas mal de chose mais rien de bien satisfaisant.

Principal.class
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
package Laby;

import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JFrame;
import javax.swing.JLayeredPane;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;

public class Principal {

	public static void main(String[] args) {

		final JFrame jf = new JFrame();
		jf.setTitle("Labyrinthe de Rêve");

		// taille fenetre
		jf.setSize(900, 600);
		// positionner au centre
		jf.setLocationRelativeTo(null);
		jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		jf.setResizable(false); // on empeche le redimensionnement

		/* Container du plateau et du compteur */
		final Container c = jf.getContentPane();
		final Container d = jf.getContentPane();
		
		/* Creation de la bar de Menu */
		JMenuBar menuBar = new JMenuBar();

		/* creation du menu */
		JMenu top1 = new JMenu("Fichier");
		JMenu top2 = new JMenu("A propos");

		/* creation des objets dans le menu */
		JMenuItem item11 = new JMenuItem("Nouvelle Partie ");
		JMenuItem item12 = new JMenuItem("Charger // inactif");
		JMenuItem item13 = new JMenuItem("Sauvegarde // inactif");
		JMenuItem item14 = new JMenuItem("Records // inactif");
		JMenuItem item15 = new JMenuItem("Quitter ");
		JMenuItem item21 = new JMenuItem("?");

		/* Menu Nouvelle page */
		item11.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				c.removeAll(); // supprimer l'ancien container pour le remplacer
								// par le nouveau
				CreationPartie zd = new CreationPartie(null,
						"~~ Création d'un LabyPower ~~", true);
				CreationPartieInfo zInfo = zd.showCreationPartie();
				int dx = 50;
				int dy = 50;
				if (zInfo.nbreLigne != 0 && zInfo.nbreColonne != 0) {
					Plateau plat = new Plateau(zInfo.nbreColonne,
							zInfo.nbreLigne, dx, dy, zInfo.taillePlateau);

					Compteur essai = new Compteur();
                                        
                                        // PROBLEME
					jf.getContentPane().add(plat); // ajout de mon plateau
					//jf.getContentPane().add(essai); // ajout du compteur
					//c.add(plat);
					//d.add(essai);
					jf.validate(); // permet la mise à jour de la fenetre
					
				}
			}
		});
		

		/* Menu Quitter */
		item15.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent event) {
				System.exit(0);
			}
		});

		/* Menu A propos */
		item21.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				JOptionPane jop = new JOptionPane();
				String mess = "J'espère que vous vous amusez bien !\n";
				mess += "\n   Tuteur:        ... \n";
				mess += "   Créateur:    ... \n";
				mess += "   Date:            ... \n";
				jop.showMessageDialog(null, mess, "À propos",
						JOptionPane.INFORMATION_MESSAGE, null);
			}
		});

		/* on ajoute les objets au menu */
		top1.add(item11);
		top1.add(item12);
		top1.add(item13);
		top1.add(item14);
		top1.add(item15);

		top2.add(item21);

		/* on ajoute le menu à la bar de menu */
		menuBar.add(top1);
		menuBar.add(top2);

		/* ajout de la bar dans la fenetre */
		jf.setJMenuBar(menuBar);

		// System.out.println();

		jf.setVisible(true);
	}
}

Compteur.class


Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public class Compteur extends JPanel implements Runnable{
	int temps = 20;
    public void run() {
    	//Code
    }
	/*public void run() {
		while (temps != 0) {
			try {
				sleep(1000);
				temps--;
				//repaint();
				System.out.println(temps);
			} catch (InterruptedException e) {
			}
		}
	}*/
	public void paintComponent(Graphics g) {
		super.paintComponent(g);
		this.setBounds(500,0,100,100);
		this.setBackground(Color.red);
	}
}
Donc voila je me tiens à votre disposition pour toutes questions bien évidemment.

Cordialement Quentin