tiDevDu54 | D'accord je comprend, le problème c'est que je n'utilise aucun thread tout simplement parce que je n'arrive pas à en créer pour mon JLabel, je ne saurai pas ou le placer dans mon code.
Voila le code entier de mon application avec à la ligne 350 le moment ou je veux rafraichir mon JLabel.
Code :
- import java.awt.Button;
- import java.awt.Color;
- import java.awt.Component;
- import java.awt.Dimension;
- import java.awt.event.ActionEvent;
- import java.awt.event.ActionListener;
- import java.awt.event.KeyEvent;
- import java.awt.event.KeyListener;
- import java.util.ArrayList;
- import java.util.EventListener;
- import java.util.HashMap;
- import java.util.List;
- import java.util.Map;
- import javax.swing.BorderFactory;
- import javax.swing.ImageIcon;
- import javax.swing.JFrame;
- import javax.swing.JLabel;
- import javax.swing.JLayeredPane;
- import javax.swing.JOptionPane;
- import javax.swing.JPanel;
- import javax.swing.JTextField;
- import javax.swing.JToolBar;
- import javax.swing.SwingUtilities;
- import javax.swing.border.Border;
- public class JLareyedPane extends JFrame implements KeyListener, ActionListener
- {
- //nom de l'utilisateur saisi à l'ouverture de l'application
- private String nom;
- //abscisse
- private int x = 5;
- //ordonnée
- private int y = 5;
- //nombre de cadeau qui sera implanté sur la grille
- private int nbCadeau;
- //abscisse et ordonnée des cases (JPanel) de la grille
- private int abscisse = 0;
- private int ordonnee = 0;
- //variable contenant le score du joueur
- private int score = 0;
- //Création du panel conteneur
- private JPanel pane = new JPanel();
- //label contenant l'image
- private JLabel grinch = new JLabel( new ImageIcon("image/test.jpg" ));
- //tableau de hachage qui nous permettra d'y créer chaque case de la grille ou panel avec un nom diférent
- private Map<String, JPanel> tabPanel = new HashMap<String, JPanel>();
- //tableau de hachage regroupant plusieurs cadeaux
- private Map<String, JLabel> tabCadeau = new HashMap<String, JLabel>();
- //texbox du nombre de cadeau
- private JTextField textFieldNbCadeau = new JTextField(20);
- //Tableau regroupant les nombres tirés au hasard
- private List<Integer> tableauTirage = new ArrayList<Integer>();
- //tableau des coordonnées X de tous les cadeaux
- private List<Integer> tableauX = new ArrayList<Integer>();
- //tableau des coordonnées X de tous les cadeaux
- private List<Integer> tableauY = new ArrayList<Integer>();
- //label contenant le score du joueur
- JLabel JLabelScore = new JLabel("Score : "+score);
- //barre d'outil
- JToolBar barreOutil = new JToolBar(); //instanciation d'une barre d'outil
- //JLayeredPane permet de superposer des composants les uns sur les autres
- JLayeredPane layeredPane = new JLayeredPane();
- //constructeur
- public JLareyedPane ()
- {
- super();
- //On initialise notre fenêtre
- build();
- this.addKeyListener(this);
- }
- //méthode qui construit la fenêtre
- private void build()
- {
- //on récupère la valeur du nom entré au démarage du jeu
- nom = afficheBienvenu();
- //si l'utilisateur a saisi quelque chose
- if(!nom.equals("" ))
- {
- setTitle("Jeu du Grinch" ); //On donne un titre à l'application
- setSize(735,528); //on donne une taille à notre fenêtre
- setLocationRelativeTo(null); //On centre la fenêtre sur l'écran
- setResizable(true); //On ne permet pas le redimensionnement
- setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //On dit à l'application de se fermer lors du clic sur la croix
- setContentPane(buildContentPane()); //on défini le contenu du conteneur principal
- genererGrille(); //on génère la grille du jeux
- setLayout(null); //on annule tout positionnement
- }
- //si l'utilisateur n'a rien saisi, on n'affiche rien
- else System.exit(0);
- }
- public String afficheBienvenu()
- {
- String nom = ""; //variable qui contiendra le nom saisi
- String saisi; //variable qui contiendra la saisie de l'utilisateur
- Boolean pasNom = true; //booléan initialisé a vrai tant qu'il n'a pas saisi de nom
- try
- {
- while(pasNom)
- {
- //on affiche une boite de dialogue pour que l'utilisateur rentre son nom
- saisi = JOptionPane.showInputDialog (null, "Saisissez votre prénom","Bienvenu au le jeu du grinch", JOptionPane.INFORMATION_MESSAGE) ;
- //si l'utilisateur a saisi quelque chose
- if(!saisi.equals("" ))
- {
- pasNom = false;
- nom = saisi;
- }
- if (saisi.equals(null)) {} // sinon on ne fait rien
- }
- }catch(NullPointerException npe)
- {
- }
- return nom;
- }
- public void genererGrille()
- {
- //création d'une bordure de couleur blanche
- Border whiteline = BorderFactory.createLineBorder(Color.white,1);
- //création de ma grille
- //110 correspond au nombre de panel
- for(int i=0; i < 110; i++)
- {
- //on fait appelle au tableau de hachage et on y insère chaque case (panel)
- tabPanel.put("monPanel"+i, new JPanel());
- tabPanel.get("monPanel"+i).setBounds(abscisse, ordonnee, 50, 50);
- tabPanel.get("monPanel"+i).setBorder(whiteline);
- tabPanel.get("monPanel"+i).setBackground(Color.black);
- //on ajoute le JPanel au layeredPane
- layeredPane.add(tabPanel.get("monPanel"+i));
- //on change les coordonnées pour pouvoir placer les panels afin de former une grille
- abscisse = abscisse + 50;
- if(abscisse > 500)
- {
- ordonnee = ordonnee + 50;
- abscisse = 0;
- }
- }
- pane.add(layeredPane);
- }
- public void genererObstacle()
- {
- //création d'un tableau de hachage pour mes obstacles
- Map<String, JLabel> tabObstacle = new HashMap<String, JLabel>();
- for(int i=0;i<10;i++)
- {
- tabObstacle.put("obstacle"+i, new JLabel( new ImageIcon("image/obstacle.jpeg" )));
- }
- }
- public void genererCadeaux(int n)
- {
- //création d'un tableau de hachage pour mes cadeaux
- for(int i=0;i<n;i++)
- {
- tabCadeau.put("cadeau"+i, new JLabel( new ImageIcon("image/cadeau.gif" )));
- }
- //instanciation d'un tableau de liste
- List<Integer> tableauTirage = new ArrayList<Integer>();
- for (int i = 0; i < n; i++)
- {
- boolean retirer = true;
- do {
- int aleatoire = (int) (Math.random() * tabPanel.size());
- if (!tableauTirage.contains(Integer.valueOf(aleatoire)))
- {
- tabPanel.get("monPanel"+aleatoire).add(tabCadeau.get("cadeau"+i));
- //tabPanel.get("monPanel" + aleatoire).add(new JLabel(new ImageIcon("image/cadeau.gif" )));
- tableauTirage.add(Integer.valueOf(aleatoire));
- tableauX.add(tabPanel.get("monPanel"+aleatoire).getX());
- tableauY.add(tabPanel.get("monPanel"+aleatoire).getY());
- retirer = false;
- }
- } while (retirer);
- }
- }
- public void effacerGrille()
- {
- for(int i=0; i<tabPanel.size(); i++)
- {
- tabPanel.get("monPanel"+i).removeAll();
- }
- }
- //construction du panel principal
- private JPanel buildContentPane()
- {
- //on change la couleur du panel principal
- pane.setBackground(Color.black);
- //largeur/hauteur
- layeredPane.setPreferredSize(new Dimension(550, 500));
- layeredPane.setBounds(176, 0, 550, 500);
- //on crée des bordure
- Border whiteline = BorderFactory.createLineBorder(Color.white,1);
- layeredPane.setBorder(whiteline);
- //on positionne le grinch sur la fenêtre
- grinch.setBounds(x, y, 25, 25);
- layeredPane.add(grinch);
- //barre d'outil
- JToolBar barreOutil = new JToolBar(); //instanciation d'une barre d'outil
- barreOutil.setLayout(null);
- barreOutil.setBounds(0, 0, 175, 520); //on positionne et redimensionne
- //label du nom du joueur
- JLabel nomJoueur = new JLabel("Bienvenue "+nom);
- nomJoueur.setBounds(20, 5, 400, 20);
- barreOutil.add(nomJoueur);
- //label "Difficulté du jeu"
- JLabel difficulte = new JLabel("Difficulté du jeu" );
- difficulte.setBounds(40, 40, 100, 20);
- barreOutil.add(difficulte);
- //label "nombre de cadeaux"
- JLabel JLabelnbCadeau = new JLabel("Nombre de cadeaux" );
- JLabelnbCadeau.setBounds(20, 90, 150, 20);
- barreOutil.add(JLabelnbCadeau);
- //texbox du nombre de cadeau
- textFieldNbCadeau.setBounds(20, 110, 30, 20);
- barreOutil.add(textFieldNbCadeau);
- //label "nombre de Whos"
- JLabel JLabelnbWho= new JLabel("Nombre de Whos" );
- JLabelnbWho.setBounds(20, 130, 150, 20);
- barreOutil.add(JLabelnbWho);
- //texbox du nombre de Whos
- JTextField textFieldNbWho = new JTextField(20);
- textFieldNbWho.setBounds(20, 150, 30, 20);
- barreOutil.add(textFieldNbWho);
- //label "vitesse des whos"
- JLabel JLabelnbVitWho= new JLabel("Vitesse des Whos" );
- JLabelnbVitWho.setBounds(20, 170, 160, 20);
- barreOutil.add(JLabelnbVitWho);
- //texbox de la vitesse des Whos
- JTextField textFieldVitWho = new JTextField(20);
- textFieldVitWho.setBounds(20, 190, 30, 20);
- barreOutil.add(textFieldVitWho);
- //bouton "valider"
- Button btnValider = new Button("Valider" );
- btnValider.setBounds(55, 225, 50, 20);
- barreOutil.add(btnValider);
- btnValider.addActionListener(this);
- //label du score
- JLabel JLabelScore = new JLabel("Score : "+score);
- JLabelScore.setBounds(20, 400, 160, 20);
- barreOutil.add(JLabelScore);
- pane.add(barreOutil);
- return pane;
- }
- public void keyPressed(KeyEvent k)
- {
- int Caract = k.getKeyCode();
- //on fait bouger l'image vers le haut
- if(Caract==KeyEvent.VK_UP)
- {
- if(y>5)
- y = y - 5;
- grinch.setLocation(x, y);
- }
- //on fait bouger l'image vers le bas
- if(Caract==KeyEvent.VK_DOWN)
- {
- if(y<470)
- y = y + 5;
- grinch.setLocation(x, y);
- }
- //on fait bouger l'image vers la droite
- if(Caract==KeyEvent.VK_RIGHT)
- {
- if(x<525)
- x = x + 5;
- grinch.setLocation(x, y);
- }
- //on fait bouger l'image vers la gauche
- if(Caract==KeyEvent.VK_LEFT)
- {
- if(x>5)
- x = x - 5;
- grinch.setLocation(x, y);
- }
- //if qui compare les coordonnées du grinch et des cado
- for(int i=0; i<tableauX.size(); i++)
- {
- int lTabX = tableauX.get(i)+25;
- int lTabY = tableauY.get(i)+25;
- if(((grinch.getX()>=tableauX.get(i))&&(grinch.getX()<=lTabX))
- &&((grinch.getY()>=tableauY.get(i))&&(grinch.getY()<=lTabY)))
- {
- JOptionPane.showMessageDialog(this,"Touché" );
- score = score + 5;
- //label du score
- JLabelScore.setText("Score : "+score);
- JLabelScore.repaint();
- }
- }
- }
- public void keyReleased(KeyEvent arg0) {}
- public void keyTyped(KeyEvent arg0) {}
- public void actionPerformed(ActionEvent ev)
- {
- //si l'utilisateur clique sur le bouton "valider"
- if (ev.getActionCommand().equals("Valider" ))
- {
- //si le nombre de cadeau est inférieur a 20
- if((textFieldNbCadeau.getText().equals("" ))||(textFieldNbCadeau.getText().equals(0)||
- (Integer.parseInt(textFieldNbCadeau.getText())>=20)))
- {
- JOptionPane.showMessageDialog(null, "Erreur dans le nombre de cadeau" );
- textFieldNbCadeau.setText("" );
- }
- else
- {
- //on efface tout élément présent sur la grille
- effacerGrille();
- //on récupère le nombre de cadeau saisi
- nbCadeau = Integer.parseInt(textFieldNbCadeau.getText());
- //on génère les cadeaux sur la grille
- genererCadeaux(nbCadeau);
- //on repositionne le grinch en haut a gauche
- grinch.setBounds(5, 5, 25, 25);
- //on rafraichi la grille
- pane.validate();
- //on donne le focus à la grille et donc au grinch
- requestFocus();
- }
- }
- }
- }
|
Message édité par tiDevDu54 le 24-11-2009 à 13:28:21
|