Mettre à jour le contenu d'une fenêtre
Résolu/Fermé
Giac
Messages postés
1263
Date d'inscription
samedi 3 novembre 2012
Statut
Membre
Dernière intervention
17 septembre 2016
-
13 mai 2014 à 23:08
Giac Messages postés 1263 Date d'inscription samedi 3 novembre 2012 Statut Membre Dernière intervention 17 septembre 2016 - 18 mai 2014 à 11:46
Giac Messages postés 1263 Date d'inscription samedi 3 novembre 2012 Statut Membre Dernière intervention 17 septembre 2016 - 18 mai 2014 à 11:46
A voir également:
- Mettre à jour le contenu d'une fenêtre
- Mettre a jour chrome - Accueil - Applications & Logiciels
- Mettre à jour ses pilotes - Guide
- Mise a jour windows 10 - Accueil - Mise à jour
- Le fichier à télécharger correspond au contenu brut d’un courrier électronique. de quel pays a été envoyé ce message ? - Guide
- Mettre a jour chromecast - Accueil - Guide TV et vidéo
2 réponses
KX
Messages postés
16754
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 020
13 mai 2014 à 23:22
13 mai 2014 à 23:22
(Re)Bonsoir,
Il faudrait voir comment tu as fait ton code, en particulier sur le lien entre les boutons et le démarrage des actions.
Est-ce que tu utilises une proglet particulière ?
Il faudrait voir comment tu as fait ton code, en particulier sur le lien entre les boutons et le démarrage des actions.
Est-ce que tu utilises une proglet particulière ?
Giac
Messages postés
1263
Date d'inscription
samedi 3 novembre 2012
Statut
Membre
Dernière intervention
17 septembre 2016
274
14 mai 2014 à 23:46
14 mai 2014 à 23:46
Voici le code sans les essais non concluants de rafraichissement du contenu de la fenêtre. Je ne suis pas tout seul sur le code, c'est un travail de groupe et je m'occupe de la partie affichage en particulier donc je ne suis pas à l'origine du reste mais j'ai compris ce qu'il se passe. Pour ce qui est de la commande du jeu, je préfère garder le code comme il est...
Merci encore pour le temps que tu m'accorde.
import java.awt.GridLayout;
import java.awt.Color;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
class Fenetre extends JFrame implements ActionListener{
//Initialisation du tableau des déplacements interdits
int[][] Labyrinthe = {{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
{1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
{1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1},
{1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1},
{1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1},
{1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1},
{1, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1},
{1, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1},
{1, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1},
{1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
{1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1},
{1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}};
int Y=1;
int X=1;
//Instanciation et construction d'un JPanel qui sera le "volet contenu" de notre fenêtre
JPanel pan = new JPanel();
//Instanciation et construction d'un tableau de 13*15 boutons
JButton[][] boutons= new JButton[15][13];
//Constructeur de la fenêtre
Fenetre(){
pan.setBackground(Color.BLACK);
//Taille de la fenêtre
this.setSize(600, 650);
//Positionnement de la fenêtre
this.setLocation(0, 0);
//Agencement du volet contenu en grille de dimension 13*15
pan.setLayout(new GridLayout(15,13,5,5));
for (int n=0;n<15;n++){
for (int m=0;m<13;m++){
//Instanciation et construction d'un bouton
JButton bout=new JButton();
//que l'on place dans la tableau aux coordonées (n;m)
boutons[n][m]=bout;
boutons[n][m].setBackground(Color.WHITE);
//Ajout du bouton au volet contenu de la fen?tre
pan.add(boutons[n][m]);
//On demande à la fenêtre d'écouter chacun des boutons
boutons[n][m].addActionListener(this);
}
}
// Mise en place du Texte sur les Boutons de commande
boutons[13][11].setText("Haut");
boutons[14][10].setText("Gauche");
boutons[14][11].setText("Bas");
boutons[14][12].setText("Droite");
//Mise n place de la coueur et du Texte du bouton "reset"
boutons[13][12].setBackground(Color.GREEN);
boutons[13][12].setText("Reset");
//Définition des boutons représentant l'écran de jeu en fonction du tableau prédéfini au début
for (int n=0;n<13;n++){
for (int m=0;m<13;m++){
//Obstacles
if(Labyrinthe[n][m]==1){
//Définition de la couleur du bouton
boutons[n][m].setBackground(Color.BLACK);
//Désactivation du bouton
boutons[n][m].setEnabled(false);
}
//Cases vides
if(Labyrinthe[n][m]==2){
boutons[n][m].setBackground(Color.BLUE);
boutons[n][m].setEnabled(false);
}
//Cases contenant une pac-gomme
if(Labyrinthe[n][m]==0){
boutons[n][m].setBackground(Color.WHITE);
boutons[n][m].setEnabled(false);
}
//Case où se situe pacman
if(Labyrinthe[n][m]==3){
boutons[n][m].setBackground(Color.YELLOW);
boutons[n][m].setEnabled(false);
}
}
}
//Définition des boutons ne servant pas
for (int n=13;n<15;n++){
for (int m=0;m<10;m++){
//Définition de la couleur
boutons[n][m].setBackground(Color.RED);
//Désactivation du bouton
boutons[n][m].setEnabled(false);
}
}
//Désactivation d'un bouton
boutons[13][10].setBackground(Color.RED);
boutons[13][10].setEnabled(false);
//Déclaration de "pan" comme volet contenu de la fenêtre
this.setContentPane(pan);
//Demande de rendre la fenêtre visible
this.setVisible(true);
}
//Méthode permettant de "faire quelque chose" lorsque l'on a cliqué sur un des boutons
public void actionPerformed(ActionEvent clic) {
//Test pour savoir si le bouton (n;m) a été cliqué
//Si l'on appuie sur le bouton Reset
if (clic.getSource()==boutons[13][12]){
//Effecer ce qui à été affiché en console
clear();
//Vérification des valeurs cases par cases
for(int a=0; a<13; a++){
for(int b=0; b<13; b++){
//Pour toutes les cases différentes de 1 et 0, affecter 0 à la case
if ((Labyrinthe[b][a]!=1) &&( Labyrinthe[b][a]!=0)){
Labyrinthe[b][a]=0;
X=1;
Y=1;
}
}
}
//Remise de pacman à son point d'origine
Labyrinthe[1][1]=3;
}
//si on appuie sur le bouton Haut
if (clic.getSource()==boutons[13][11] && ((0<=Y) && (Y<=12))){
// si la valeur de la case du haut est de 1, pacman ne bouge pas
if (Labyrinthe[X-1][Y]==1){
Labyrinthe[X][Y]=3;
}else{
//Sinon il va sur la case demandée
Labyrinthe[X][Y]=2;
Labyrinthe[X-1][Y]=3;
X=X-1;
}
clear();
}
//si on appuie sur le bouton Gauche
if (clic.getSource()==boutons[14][10]&& ((0<=X) && (X<=12))){
//Si la valeur de la case de gauche est à 1, pacman ne bouge pas
if (Labyrinthe[X][Y-1]==1){
Labyrinthe[X][Y]=3;
}else{
// sinon il va sur la case demandée
Labyrinthe[X][Y]=2;
Labyrinthe[X][Y-1]=3;
Y=Y-1;
}
clear();
}
//Si on appuie sur le bouton Bas
if (clic.getSource()==boutons[14][11]&& ((0<=Y) && (Y<=12))){
//Si la valeur de la case de dessous est à 1, pacman ne bouge pas
if (Labyrinthe[X+1][Y]==1){
Labyrinthe[X][Y]=3;
}else{
//Sinon il va sur la case demandée
Labyrinthe[X][Y]=2;
Labyrinthe[X+1][Y]=3;
X=X+1;
}
clear();
}
//Si on appuie sur le bouton Droite
if (clic.getSource()==boutons[14][12]&& ((0<=X) && (X<=12))){
//Si la valeur de la case de droite est à 1, pacman ne bouge pas
if (Labyrinthe[X][Y+1]==1){
Labyrinthe[X][Y]=3;
}else{
// sinon il va sur la case demandée
Labyrinthe[X][Y]=2;
Labyrinthe[X][Y+1]=3;
Y=Y+1;
}
clear();
}
//Affichage numérique dans la console
for(int a=0; a<13; a++){
for(int b=0; b<13; b++){
System.out.print(" "+Labyrinthe[a][b]+" ");
}
println(" ");
}
}
}
void main() {
//instanciation et construction d'une fenêtre
Fenetre fen = new Fenetre();
}
Merci encore pour le temps que tu m'accorde.
KX
Messages postés
16754
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 020
Modifié par KX le 15/05/2014 à 19:46
Modifié par KX le 15/05/2014 à 19:46
Alors...
Lorsque tu fais une action pour l'instant la seule chose que ça fait c'est changer la valeur du tableau.
Mais cela ne suffit pas, car il faut aussi changer tes boutons (ça ne va pas se faire tout seul).
Du coup, pas besoin de repaint, ça va se faire tout seul.
Pour en revenir aux quelques conseils que je te donnais hier, je trouve vraiment dommage de faire
Tu pourrais faire ainsi qui est plus propre :
Et pareil pour les 4 autres boutons...
Lorsque tu fais une action pour l'instant la seule chose que ça fait c'est changer la valeur du tableau.
// si on appuie sur le bouton Haut if (clic.getSource() == boutons[13][11] && ( (0 <= Y) && (Y <= 12))) { // si la valeur de la case du haut est de 1, pacman ne bouge pas if (Labyrinthe[X - 1][Y] == 1) { Labyrinthe[X][Y] = 3; } else { // Sinon il va sur la case demandée Labyrinthe[X][Y] = 2; Labyrinthe[X - 1][Y] = 3; X = X - 1; } clear(); }
Mais cela ne suffit pas, car il faut aussi changer tes boutons (ça ne va pas se faire tout seul).
else { // Sinon il va sur la case demandée Labyrinthe[X][Y] = 2; boutons[X][Y].setBackground(Color.WHITE); Labyrinthe[X - 1][Y] = 3; boutons[X - 1][Y].setBackground(Color.YELLOW); X = X - 1; }
Du coup, pas besoin de repaint, ça va se faire tout seul.
Pour en revenir aux quelques conseils que je te donnais hier, je trouve vraiment dommage de faire
boutons[n][m].addActionListener(this);c'est à dire de mettre le même listener pour tous les boutons, alors qu'il n'y a que 5 boutons sur lesquels on va appuyer et qu'ils vont tous faire une action différente.
Tu pourrais faire ainsi qui est plus propre :
// Mise en place du Texte sur les Boutons de commande boutons[13][11].setText("↑"); boutons[13][11].addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { if (X==0) // on ne peut pas faire Labyrinthe[X-1][Y] return; // si la valeur de la case du haut est de 1, pacman ne bouge pas if (Labyrinthe[X - 1][Y] == 1) { Labyrinthe[X][Y] = 3; // inutile non ? pac-man est déjà là... } else { // Sinon il va sur la case demandée Labyrinthe[X][Y] = 2; boutons[X][Y].setBackground(Color.WHITE); Labyrinthe[X - 1][Y] = 3; boutons[X - 1][Y].setBackground(Color.YELLOW); X = X - 1; } } });
Et pareil pour les 4 autres boutons...
Giac
Messages postés
1263
Date d'inscription
samedi 3 novembre 2012
Statut
Membre
Dernière intervention
17 septembre 2016
274
18 mai 2014 à 11:46
18 mai 2014 à 11:46
Désolé de répondre aussi tard, mais j'avais des dossiers à faire donc je ne me suis pas trop penché dessus, mais c'est bon, ça marche enfin, merci beaucoup, grâce à ton aide, je pourrais présenter un programme qui marche.
Merci pour le temps que ça a du te prendre =D
Merci pour le temps que ça a du te prendre =D
13 mai 2014 à 23:57
Dans la classe, j'ai créé un procédure "public void actionPerformed(ActionEvent clic)" dans laquelle je fait effectuer les actions pour faire bouger la valeur représentant le pacman dans le tableau d'entier quand on clique sur un des boutons et je ne trouve pas comment changer l'apparence des boutons après ça...
Je travail dans la projet "Manuel ISN", je ne sais pas si ça changera grand chose de passer dans "Java prog"...
14 mai 2014 à 07:40
Dans ton constructeur as-tu pensé à faire un ?
14 mai 2014 à 08:44
14 mai 2014 à 16:14
Erreur de syntaxe ligne 203 :
non-static method repaint() cannot be referenced from a static context
Fenetre.repaint();
^
14 mai 2014 à 18:26
au début de la procédure d'actionEvent clic pour effacer ce que j'ai sur mon panneau puis, à la fin :
Pour ré afficher le panneau une fois les modifications faites, mais quand j'appuie sur un bouton, tout s'efface.