Tu as capté le système pour personnaliser l'affichage ?
Version imprimable
Tu as capté le système pour personnaliser l'affichage ?
un peu, je le ferai plutard, mais je n'ai pas besoin d'un tableau de chronos mais juste le premier
et je n'ai pas besoin aussi des bouton start et stop
Ok, d'accord
Finalement je n'arrive pas à le mettre là ou je veux,
quand je l'ajoute après les cartes comme ceci:
il prend la place de trois cartes, je ne sais pas comment gérer le layout pour l'afficher en bas du panneau ou en haut:oops:Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 for(int i =0;i<nRangees*nColonnes; i++){ this.add(cartes[i]); cartes[i].addMouseListener(mouseAdapter); } Timer t = new Timer(delai0,new ActionListener(){// affichage initial de toutes les cartes pendant un délai "delai0" public void actionPerformed(ActionEvent e){ for(int i =0;i<nRangees*nColonnes; i++){ cartes[i].retourne(); } } }); t.start(); t.setRepeats(false); add(c); c.start();
Tu vas être probablement obligé de gérer ça en 2 panels, parce que tes cartes sont en grille, c'est-a-dire en dehors de ton PanneauDeCartes.
Par exemple, tu fais un JPanle avec un BorderLayout. Tu mets ton PanneauDeCartes au centre. Tu fais un JPanel avec un autre layout (tout dépend exactement où tu veux mettre le chrono), et tu mets le chrono dedans.
Exemples :
Code:
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 JFrame frame = new JFrame("Démo"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JPanel panel = new JPanel(new BorderLayout()); frame.getContentPane().add(panel); Chrono chrono = new Chrono(); // exemple 1 en bas au centre : //panel.add(chrono, BorderLayout.SOUTH); // exemple 2 à droite en haut : //panel.add(chrono, BorderLayout.EAST); // exemple 3 à droite, à 100px du haut /*JPanel panelChrono = new JPanel(); panelChrono.setLayout(new BoxLayout(panelChrono, BoxLayout.Y_AXIS)); panelChrono.add(Box.createVerticalStrut(100))); panelChrono.add(chrono); panel.add(panelChrono, BorderLayout.EAST);*/ // exemple 4 à droite, au centre /*JPanel panelChrono = new JPanel(); panelChrono.setLayout(new BoxLayout(panelChrono, BoxLayout.Y_AXIS)); panelChrono.add(Box.createVerticalGlue()); panelChrono.add(chrono); panel.add(panelChrono, BorderLayout.EAST);*/ // exemple 5 à droite, en bas /*JPanel panelChrono = new JPanel(new BorderLayout()); panelChrono.add(chrono, BorderLayout.SOUTH); panel.add(panelChrono, BorderLayout.EAST);*/ // exemple 6 en bas à droite : JPanel panelChrono = new JPanel(new FlowLayout(FlowLayout.RIGHT)); panelChrono.add(chrono); panel.add(panelChrono, BorderLayout.SOUTH); // etc. panel.add(new PanneauDeCarte()); // au centre (par défaut) frame.setSize(400, 600); frame.setLocationRelativeTo(null); frame.setVisible(true);
j'avais déjà essayé ça et ça me prenait la moitié de la frame, mais je vais réessayer
tu vas rire de mois, mais je n'arrive pas à arrêter le chrono
j'ai mis l'appel chrono.stop() dans la fonction testFin et dans le mouseAdapter mais ça ne change rien
D'autre part, je ne sais pas si t'as remarqué, au début j'affiche toutes les images pendant 2secondes pour les cacher après et je voudrais que le chrono démarre après le premier click, alors qu'il démarre dès que je lance le jeu!!!
A mon avis, tu as 2 instances de Chrono, une qui est affichée et l'autre sur laquelle tu fais stop(). Comme tu places le chronomètre en dehors du plateeau, il te faut passer la référence du composant Chrono au PlateauDeCarte pour y avoir accès (sinon il faut faire un système évenementiel (ou mettre en place le motifi observer/observable).
Il faut appeler le start() sur le premier click, avec un test, par exemple :
Code:
1
2
3
4
5
6
7 public void mousePressed(MouseEvent event) { if ( premierClick ) { premierClick=false; chrono.start(); } /*...*/ }
J'ai rajouté un attribu static de type Chrono dans mon panneau et c'est celui la que j'ajoute dans le Panel de ma frame
d'autre part je le demarre au début de ma méthode mouseClicked quand la carte cliquée est cachéee et carteVisible= null
je sais qu'il y aura d'autres situations comme ca au milieu de la partie mais comme il y aura un timer en cours start() ne changera rien vu comment tu l'as défini
tout marche à merveil.
Je trouve juste que ça prend un peu de temps pour se charger au début(5secondes), surtout pour les images mauis je pense que c'est normal parce que mes images sont sur internet
Il faudrait voir la classe GenerateurDeCarte pour voir s'il y a moyen d'accélerer, mais bon le plus simple encore est de charger les images une fois pour toutes. Parce que là, déjà il faut être connecté pour jouer, ensuite, si le serveur n'est pas dispo ou disparait définitivement, ça ne fonctionne plus non plus. Ce serait dommage. Ensuite, on doit pouvoir ne charger que les images qu'on utilise, au lieu de tout charger. Déjà, en instanciant un jeu de carte que lorsqu'on l'utilise.
Ok, je vais télécharger les images une fois pour toute
merci pour tout et désolé d'avoir abusé de ton temps
Une technique intéressante pour limiter le poids et le nombre de fichiers est d'assembler toutes les images dans une (une par jeu par exemple). En particulier si toutes les images ont la même taille. Ensuite, tu la charges en BufferedImage, et tu récupères les "sous-images", par la méthode getSubimage(). Cela ne fait pas de copie, donc ça ne prend pas plus de place en mémoire.
Ok, merci beaucoup