Créer une fenêtre pour afficher les meilleurs scores
Fermé
BKCelia
-
Modifié le 11 mai 2020 à 17:32
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 - 15 mai 2020 à 09:10
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 - 15 mai 2020 à 09:10
A voir également:
- Créer une fenêtre pour afficher les meilleurs scores
- Créer un compte gmail - Guide
- Créer un compte google - Guide
- Créer une liste déroulante excel - Guide
- Créer un groupe whatsapp - Guide
- Créer une adresse hotmail - Guide
4 réponses
KX
Messages postés
16734
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
24 avril 2024
3 015
11 mai 2020 à 17:44
11 mai 2020 à 17:44
Bonjour,
Il manque au minimum
Quant à pressedPlay et pressedScore, à mon avis, il faudra les supprimer, car elles ne permettent pas de gérer les événements comme il faut (et en tout cas il faudra supprimer leur propriété static, c'est faux).
Normalement, on devrait plutôt avoir l'affichage directement au sein du Listener sans gérer de variables d'états.
Il manque au minimum
fenetre2.setVisible(true);pour que la fenêtre s'affiche.
Quant à pressedPlay et pressedScore, à mon avis, il faudra les supprimer, car elles ne permettent pas de gérer les événements comme il faut (et en tout cas il faudra supprimer leur propriété static, c'est faux).
Normalement, on devrait plutôt avoir l'affichage directement au sein du Listener sans gérer de variables d'états.
public void mouseClicked(MouseEvent e) { mouseX = e.getX(); mouseY = e.getY(); // ... if (e.getX() > 800 && e.getX() < 1000 && e.getY() > 650 && e.getY() < 730) { // partie est consacrée au bouton "SCORE" fenetre2.setVisible(true); } }
Bonsoir, j'ai suivi vos conseils, et ça marche désormais, le problème maintenant c'est que je ne sais pas comment afficher le fichier dans cette nouvelle fenêtre
KX
Messages postés
16734
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
24 avril 2024
3 015
13 mai 2020 à 09:15
13 mai 2020 à 09:15
Si c'est juste du texte que tu veux afficher, un TextArea devrait suffire.
https://docs.oracle.com/javase/tutorial/uiswing/components/textarea.html
Quant à la lecture du fichier tu peux faire :
https://docs.oracle.com/javase/tutorial/uiswing/components/textarea.html
Quant à la lecture du fichier tu peux faire :
String text = Files.lines(Paths.get("E:/text.txt"), Charset.defaultCharset()) .collect(Collectors.joining("\n"));
Pour ajouter du texte j'ai utilisé :
private Font afficheScore = new Font("Arial", Font.PLAIN, 30);
et
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics g2 = (Graphics2D)g;
g2.drawImage(this.imgFondScore, 0, 0, null);
g.setFont(afficheScore);
g.drawString("Test " + score, 50, 50);
et ça marche (j'ai essayé plusieurs fois avec un TextArea, en vain), mais comment est ce que j'affiche mon tableau maintenant que j'ai récupérer le fichier grâce à votre méthode ?
private Font afficheScore = new Font("Arial", Font.PLAIN, 30);
et
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics g2 = (Graphics2D)g;
g2.drawImage(this.imgFondScore, 0, 0, null);
g.setFont(afficheScore);
g.drawString("Test " + score, 50, 50);
et ça marche (j'ai essayé plusieurs fois avec un TextArea, en vain), mais comment est ce que j'affiche mon tableau maintenant que j'ai récupérer le fichier grâce à votre méthode ?
KX
Messages postés
16734
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
24 avril 2024
3 015
14 mai 2020 à 08:00
14 mai 2020 à 08:00
Tu ne t'en sortiras pas à tout vouloir faire via la méthode paintComponent. Je n'ai rien dit pour tes autres discussions parce que pour un jeu vidéo ça pouvait se justifier (même si l'utilisation de bouton auraient été plus simple) mais ici il va falloir que tu rajoutes un composant comme JTextArea.
Quel est le contenu de ton fichier ? Et comment veux tu l'afficher ?
Quel est le contenu de ton fichier ? Et comment veux tu l'afficher ?
Ah, oui en effet, mais nous souhaitions faire des boutons avec un certain style, pour une question d'esthétique, c'est pour cela qu'on avais utilisé paintComponent, je vais donc essayer de réecrire avec du JTextArea.
Quant au fichier, il contient le nom des joueurs, et le score qu'ils ont obtenu
nous souhaitons l'afficher en plusieurs lignes, comme dans les vieux jeux d'arcade, avec le nom et le score à côté du premier sur la première ligne, le nom et le score du deuxième sur la deuxième ligne etc.
Quant au fichier, il contient le nom des joueurs, et le score qu'ils ont obtenu
package Systeme; import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.io.PrintWriter; import java.text.Normalizer; import java.util.Scanner; import acm.program.ConsoleProgram; import acm.program.*; public class ScoreComet extends ConsoleProgram{ public void run(){ int NombreScore=0; int NombreJoueur=0; int Compteur = 1; int k; int iishimumeme = 0; int NouveauScore; String NouveauJoueur; String [][] Score = new String [10] [2]; String [][] Scoretrie = new String [10] [2]; File fichier = new File("Score.txt"); try{ Scanner AEntree = new Scanner(fichier); while(AEntree.hasNextLine()){ int reste = Compteur % 2; if(reste != 0){ Score [NombreScore] [0] = AEntree.nextLine(); NombreScore = NombreScore + 1; Compteur = Compteur +1; } else { Score [NombreJoueur] [1] = AEntree.nextLine(); NombreJoueur = NombreJoueur + 1; Compteur = Compteur +1; } } AEntree.close(); } catch (IOException e){ println("Erreur Traitement fichier:"+ e ); } int alpha = Integer.valueOf(Score[0][0]); for(k = 0; k<10; k++) { if(Integer.valueOf(Score[k][0])>alpha) { alpha = Integer.valueOf(Score[k][0]); iishimumeme = k; } } Scoretrie [0][0] = Integer.toString(alpha); Scoretrie [0][1] = Score[iishimumeme][1]; Score[iishimumeme][0] = "0"; Score[iishimumeme][1] = "0"; iishimumeme = 0; int beta = Integer.valueOf(Score[0][0]); for(k = 0; k<10; k++) { if(Integer.valueOf(Score[k][0])>beta) { beta = Integer.valueOf(Score[k][0]); iishimumeme = k; } } Scoretrie [1][0] = Integer.toString(beta); Scoretrie [1][1] = Score[iishimumeme][1]; Score[iishimumeme][0] = "0"; Score[iishimumeme][1] = "0"; iishimumeme = 0; int gamma = Integer.valueOf(Score[0][0]); for(k = 0; k<10; k++) { if(Integer.valueOf(Score[k][0])>gamma) { gamma = Integer.valueOf(Score[k][0]); iishimumeme = k; } } Scoretrie [2][0] = Integer.toString(gamma); Scoretrie [2][1] = Score[iishimumeme][1]; Score[iishimumeme][0] = "0"; Score[iishimumeme][1] = "0"; iishimumeme = 0; int delta = Integer.valueOf(Score[0][0]); for(k = 0; k<10; k++) { if(Integer.valueOf(Score[k][0])>delta) { delta = Integer.valueOf(Score[k][0]); iishimumeme = k; } } Scoretrie [3][0] = Integer.toString(delta); Scoretrie [3][1] = Score[iishimumeme][1]; Score[iishimumeme][0] = "0"; Score[iishimumeme][1] = "0"; iishimumeme = 0; int epsilon = Integer.valueOf(Score[0][0]); for(k = 0; k<10; k++) { if(Integer.valueOf(Score[k][0])>epsilon) { epsilon = Integer.valueOf(Score[k][0]); iishimumeme = k; } } Scoretrie [4][0] = Integer.toString(epsilon); Scoretrie [4][1] = Score[iishimumeme][1]; Score[iishimumeme][0] = "0"; Score[iishimumeme][1] = "0"; iishimumeme = 0; int zeta = Integer.valueOf(Score[0][0]); for(k = 0; k<10; k++) { if(Integer.valueOf(Score[k][0])>zeta) { zeta = Integer.valueOf(Score[k][0]); iishimumeme = k; } } Scoretrie [5][0] = Integer.toString(zeta); Scoretrie [5][1] = Score[iishimumeme][1]; Score[iishimumeme][0] = "0"; Score[iishimumeme][1] = "0"; iishimumeme = 0; int eta = Integer.valueOf(Score[0][0]); for(k = 0; k<10; k++) { if(Integer.valueOf(Score[k][0])>eta) { eta = Integer.valueOf(Score[k][0]); iishimumeme = k; } } Scoretrie [6][0] = Integer.toString(eta); Scoretrie [6][1] = Score[iishimumeme][1]; Score[iishimumeme][0] = "0"; Score[iishimumeme][1] = "0"; iishimumeme = 0; int theta = Integer.valueOf(Score[0][0]); for(k = 0; k<10; k++) { if(Integer.valueOf(Score[k][0])>theta) { theta = Integer.valueOf(Score[k][0]); iishimumeme = k; } } Scoretrie [7][0] = Integer.toString(theta); Scoretrie [7][1] = Score[iishimumeme][1]; Score[iishimumeme][0] = "0"; Score[iishimumeme][1] = "0"; iishimumeme = 0; int lota = Integer.valueOf(Score[0][0]); for(k = 0; k<10; k++) { if(Integer.valueOf(Score[k][0])>lota) { lota = Integer.valueOf(Score[k][0]); iishimumeme = k; } } Scoretrie [8][0] = Integer.toString(lota); Scoretrie [8][1] = Score[iishimumeme][1]; Score[iishimumeme][0] = "0"; Score[iishimumeme][1] = "0"; iishimumeme = 0; int kappa = Integer.valueOf(Score[0][0]); for(k = 0; k<10; k++) { if(Integer.valueOf(Score[k][0])>kappa) { kappa = Integer.valueOf(Score[k][0]); iishimumeme = k; } } Scoretrie [9][0] = Integer.toString(kappa); Scoretrie [9][1] = Score[iishimumeme][1]; Score[iishimumeme][0] = "0"; Score[iishimumeme][1] = "0"; for(k = 0; k<10; k++) { println(Scoretrie[k][1] +" "+Scoretrie[k][0]); } int NJ = 0; int NS = 0; Compteur = 1; NouveauScore = readInt("Veuiller saisir le nouveau score :"); NouveauJoueur = readLine("Veuiller saisir votre nom :"); if(NouveauScore >Integer.valueOf(Scoretrie [9][0])) { Scoretrie [9][0] = Integer.toString(NouveauScore); Scoretrie [9][1] = NouveauJoueur; try{ PrintWriter ASortie = new PrintWriter("Score.txt"); for(k = 0; k<20; k++) { int reste = Compteur % 2; if(reste != 0){ ASortie.println(Scoretrie [NS][0]); NS = NS + 1; Compteur = Compteur + 1; } else { ASortie.println(Scoretrie [NJ][1]); NJ = NJ + 1; Compteur = Compteur + 1; } } ASortie.close(); } catch (IOException e){ println("Erreur Traitement fichier:"+ e ); } } else { try{ PrintWriter BSortie = new PrintWriter("Score.txt"); for(k = 0; k<20; k++) { int reste = Compteur % 2; if(reste != 0){ BSortie.println(Scoretrie [NS][0]); NS = NS + 1; Compteur = Compteur + 1; } else { BSortie.println(Scoretrie [NJ][1]); NJ = NJ + 1; Compteur = Compteur + 1; } } BSortie.close(); } catch (IOException e){ println("Erreur Traitement fichier:"+ e ); } } } }
nous souhaitons l'afficher en plusieurs lignes, comme dans les vieux jeux d'arcade, avec le nom et le score à côté du premier sur la première ligne, le nom et le score du deuxième sur la deuxième ligne etc.
KX
Messages postés
16734
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
24 avril 2024
3 015
15 mai 2020 à 09:10
15 mai 2020 à 09:10
Voici un exemple rapide pour expliquer comment tu peux mettre du HTML dans les composants Swing.
Ce qui donne une pop-up qui s'affiche comme ceci (c'est perfectible).
// import javax.swing.JOptionPane; public static void main(String[] args) { String[] joueurs = { "ABCDE", "FGHIJ", "KLMNO" }; int[] scores = { 123, 456, 789 }; String[] colors = { "red", "rgb(0,255,0)", "#0000ff" }; StringBuilder sb = new StringBuilder("<html>"); for (int i = 0, n = Math.min(joueurs.length, scores.length); i < n; i++) { sb.append("<font size=20 color=").append(colors[i]).append("><center>") .append(joueurs[i]).append(" ").append(scores[i]) .append("</center></font><br>"); } String content = sb.append("</html>").toString(); JOptionPane.showMessageDialog(null, content, "Scores", JOptionPane.PLAIN_MESSAGE); }
Ce qui donne une pop-up qui s'affiche comme ceci (c'est perfectible).