Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3035 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  [JAVA Débutant] KeyListerner sur JFrame OK, mais sur un JPanel ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[JAVA Débutant] KeyListerner sur JFrame OK, mais sur un JPanel ?

n°1372574
ParadoX
Posté le 22-05-2006 à 21:23:36  profilanswer
 

Bonjour,
 
Quand j'ajoute un Keylistener sur un JFrame entier, tout fonctionne ... mais quand je fais la même chose avec un JPanel, ça ne marche pas. Y a-t-il une solution, ou ce n'est pas possible ? :/
 
 :jap:


---------------
Pier noir la mèr - La chanson par HFR Band - Topic TrueCrypt
mood
Publicité
Posté le 22-05-2006 à 21:23:36  profilanswer
 

n°1372596
ParadoX
Posté le 22-05-2006 à 21:47:56  profilanswer
 

Bon, je désespère.
Je colle le code de mes 2 classes:
 
Classe Jeu
 

Code :
  1. // Composants graphiques
  2. import javax.swing.*;
  3. import java.awt.*;
  4. import java.awt.event.*;
  5. // Composants réseau
  6. import java.net.InetAddress;
  7. import java.net.DatagramSocket;
  8. import java.net.SocketException;
  9. import java.awt.event.KeyListener;
  10. import java.awt.event.KeyEvent;
  11. public class Jeu extends JPanel
  12. {
  13.     ////////////////////////////////////////// Attributs //////////////////////////////////////////
  14.    
  15.     private int pendaison;
  16.    
  17.     ////////////////////////////////////////// Constantes //////////////////////////////////////////
  18.    
  19.     // Constantes pour le degré de pendaison
  20.     private static final int STRUCTURE          = 0;
  21.     private static final int CORDE              = 1;
  22.     private static final int TETE               = 2;
  23.     private static final int CORPS              = 3;
  24.     private static final int BRAS_DROIT         = 4;
  25.     private static final int BRAS_GAUCHE        = 5;
  26.     private static final int JAMBE_DROITE       = 6;
  27.     private static final int JAMBE_GAUCHE       = 7;
  28.     private static final int PERDU              = 7;
  29.     ////////////////////////////////////////// Constructeurs //////////////////////////////////////////
  30.    
  31.     public Jeu()
  32.     {   
  33.         // DEBUT INTERFACE GRAPHIQE ->
  34.        
  35.         // Fenetre principale
  36.         JFrame fenster = new JFrame();       
  37.         fenster.setTitle("Le jeu du pendu" );
  38.         fenster.setLayout(new BorderLayout());
  39.        
  40.         // Window listener pour la fenetre principale
  41.         fenster.addWindowListener(new WindowAdapter(){
  42.             public void windowClosing(WindowEvent e){
  43.                 System.exit(0);
  44.             }
  45.         });
  46.        
  47.         // Menu
  48.         JMenuBar menuBar = new JMenuBar();
  49.         fenster.setJMenuBar(menuBar);       
  50.         JMenu fichier = new JMenu();
  51.         JMenu about = new JMenu();       
  52.         JMenuItem quitter = new JMenuItem();
  53.         JMenuItem credits = new JMenuItem();       
  54.         fichier.setText("Fichier" );
  55.         fichier.add(quitter);       
  56.         quitter.setText("Quitter" );
  57.         quitter.setEnabled(true);
  58.        
  59.         // ActionListener pour le menu "quitter"
  60.         quitter.addActionListener(new ActionListener(){
  61.         public void actionPerformed(ActionEvent e){
  62.                 System.exit(0);
  63.             }
  64.         });
  65.        
  66.         // Menu, suite
  67.         about.setText("A Propos" );
  68.         about.add(credits);
  69.         credits.setText("Credits" );
  70.         credits.setEnabled(true);
  71.        
  72.         credits.addActionListener(new ActionListener(){
  73.         public void actionPerformed(ActionEvent e){
  74.                 System.exit(0); // A MODIFIER: METTRE UN POPUP !
  75.             }
  76.         });
  77.        
  78.         // Ajout du menu
  79.         menuBar.add(fichier);
  80.         menuBar.add(about);       
  81.        
  82.         // Fond
  83.         setBackground(Color.white);
  84.         fenster.add(this);
  85.         // Bouton
  86.         JButton Ende = new JButton("Quitter" );
  87.         Ende.addActionListener(new ActionListener(){
  88.             public void actionPerformed(ActionEvent e){
  89.                 System.exit(0);
  90.             }
  91.         });
  92.        
  93.         // Ajout du bouton
  94.         fenster.add(Ende, BorderLayout.SOUTH);
  95.        
  96.         // Propriétés de la fenetre principale  
  97.         fenster.setSize(500,500);
  98.         fenster.setVisible(true);
  99.        
  100.         // Keylistener
  101.         fenster.addKeyListener(new Listener(this));
  102.         // FIN INTERFACE GRAPHIQE <-
  103.        
  104.         // Degré de pendaison initial: Structure
  105.         pendaison = STRUCTURE;
  106.     }   
  107.    
  108.     public static void main( String[] args)
  109.     {
  110.         new Jeu();       
  111.     }
  112.     ////////////////////////////////////////// Méthodes //////////////////////////////////////////
  113.    
  114.     // Etat++
  115.     public void incrementation()
  116.     {
  117.         pendaison ++;
  118.     }
  119.     // Dessine le pendu
  120.     public void paint(Graphics g)
  121.     {
  122.         // Hauteur et largeur
  123.         int y = getHeight() / 10;
  124.         int x = getWidth() / 10;
  125.        
  126.         switch(pendaison)
  127.         {
  128.             case JAMBE_GAUCHE :
  129.             // Jambre gauche
  130.             g.drawLine(6*x, 7*y, 5*x, 7*y + y/2);
  131.        
  132.             case JAMBE_DROITE :
  133.             // Jambre droite
  134.             g.drawLine(6*x, 7*y, 7*x, 7*y + y/2); 
  135.            
  136.             case BRAS_GAUCHE :
  137.             // Bras gauche
  138.             g.drawLine(6*x, 6*y, 5*x, 6*y + y/2);
  139.            
  140.             case BRAS_DROIT :
  141.             // Bras droit
  142.             g.drawLine(6*x, 6*y, 7*x, 6*y + y/2);
  143.            
  144.             case CORPS :
  145.             // Corps
  146.             g.drawLine(6*x, 6*y, 6*x, 7*y);
  147.            
  148.             case TETE :
  149.             // Tete
  150.             g.drawOval(5*x+x/2, 5*y, x, y);
  151.            
  152.             case CORDE :
  153.              // Corde
  154.             g.drawLine(6*x, 4*y, 6*x, 5*y);
  155.            
  156.             case STRUCTURE :
  157.             // Structure du pendu (toujours présent)
  158.             // Mat central
  159.             g.drawLine(4*x, 4*y, 4*x, 8*y);
  160.             g.drawLine(4*x+1, 4*y, 4*x+1, 8*y);
  161.        
  162.             // Barre du haut
  163.             g.drawLine(4*x, 4*y, 6*x, 4*y);
  164.             g.drawLine(4*x, 4*y+1, 6*x, 4*y+1);
  165.            
  166.             // Pied
  167.             g.drawLine(3*x, 8*y, 5*x, 8*y);
  168.             g.drawLine(3*x, 8*y+1, 5*x, 8*y+1);
  169.        
  170.             // Coude
  171.             g.drawLine(4*x, 5*y, 5*x, 4*y);
  172.             g.drawLine(4*x+1, 5*y, 5*x+1, 4*y);
  173.            
  174.             break;
  175.         }
  176.        
  177.             // Gagné !
  178.             //g.drawString("Vous avez gagné !", 4*x, 3*y);
  179.            
  180.             // Perdu !
  181.             if(pendaison == PERDU)
  182.             {
  183.                 g.drawString("Vous avez perdu !", 4*x, 3*y);
  184.             }
  185.         }
  186. }


 
puis Classe Listerner
 

Code :
  1. import java.awt.event.KeyListener;
  2. import java.awt.event.KeyEvent;
  3. public class Listener implements KeyListener
  4. {
  5.     private Jeu monJeu;
  6.    
  7.     public Listener(Jeu unJeu)
  8.     {
  9.         monJeu = unJeu;
  10.         System.out.println("Constructeur Listener OK" );
  11.     }
  12.     public void keyPressed(KeyEvent e)
  13.     {
  14.         // limite les caracteres testes sur l'alphabet
  15.         if ((e.getKeyChar() >= 'a' && e.getKeyChar() <= 'z') || (e.getKeyChar() >= 'A' && e.getKeyChar() <= 'Z'))
  16.         {
  17.             System.out.println("Hallo" );
  18.             monJeu.incrementation();
  19.         }
  20.     }
  21.    
  22.     //---------------------------     
  23.    
  24.     /**
  25.      * pas implemente - pas de fonction
  26.      */
  27.     public void keyReleased(KeyEvent e)
  28.     {
  29.    
  30.     }
  31.    
  32.     //---------------------------     
  33.    
  34.     /**
  35.      * pas implemente - pas de fonction
  36.      */
  37.     public void keyTyped(KeyEvent e)
  38.     {
  39.    
  40.     }
  41. }


 
Pourquoi le Listener ne fonctionne-t-il pas ? :sweat:  :sweat: Il passe dans le constructeur pourtant :cry:


Message édité par ParadoX le 22-05-2006 à 21:49:05

---------------
Pier noir la mèr - La chanson par HFR Band - Topic TrueCrypt
n°1372617
gm_superst​ar
Appelez-moi Super
Posté le 22-05-2006 à 22:02:00  profilanswer
 

J'ai pas regardé l'histoire du listener mais déjà je trouve assez consternifiant cette histoire de Jeu (qui est ton appli principale) qui hérite de JPanel...
 
Ton appli principale, c'est ton appli principale. Elle met en place les différents composants (la frame, les boutons, la zone d'affichage du jeu, c'est à dire le JPanel customisé pour dessiner un pendu). Ce n'est pas à elle de s'occuper comment dessiner un pendu.
 
Donc tu dois écrire au minimum 2 classes  
 - une classe AffichageJeu (par exemple) qui hérite de JPanel
 - une classe Jeu qui instancie les composants dont elle a besoin (dont AffichageJeu) et qui possède éventuellement toute la logique du jeu du pendu.
 - éventuellement une troisième classe qui possède le main() et instancie un Jeu
 
Et j'avais dit d'utiliser paintComponent().
 
Commence par faire ça, on verra ensuite l'histoire du listener.


Message édité par gm_superstar le 22-05-2006 à 22:03:40

---------------
Incongru : une FAQ abandonnée sur les Standards du Web - FAQ périmée de blabla@Prog
n°1372624
ParadoX
Posté le 22-05-2006 à 22:10:01  profilanswer
 

Merci bien :jap:  
Je tente, et je reviens :)


---------------
Pier noir la mèr - La chanson par HFR Band - Topic TrueCrypt
n°1372631
ParadoX
Posté le 22-05-2006 à 22:23:05  profilanswer
 

Voila, alors j'ai plusieurs classes maintenant:
 
- Jeu
- Affichage
- Listener
- Lancer jeu (avec juste un main() qui fait un new Jeu)
 
Jdétaille Jeu et Affichage:
 
Jeu:

Code :
  1. // Composants graphiques
  2. import javax.swing.*;
  3. import java.awt.*;
  4. import java.awt.event.*;
  5. // Composants réseau
  6. import java.net.InetAddress;
  7. import java.net.DatagramSocket;
  8. import java.net.SocketException;
  9. import java.awt.event.KeyListener;
  10. import java.awt.event.KeyEvent;
  11. public class Jeu
  12. {
  13.     ////////////////////////////////////////// Attributs //////////////////////////////////////////
  14.    
  15.     private int pendaison;
  16.    
  17.     ////////////////////////////////////////// Constructeurs //////////////////////////////////////////
  18.    
  19.     public Jeu()
  20.     {   
  21.         // DEBUT INTERFACE GRAPHIQE ->         
  22.         // Fenetre principale
  23.         JFrame fenster = new JFrame();       
  24.         fenster.setTitle("Le jeu du pendu" );
  25.         fenster.setLayout(new BorderLayout());
  26.        
  27.         // Window listener pour la fenetre principale
  28.         fenster.addWindowListener(new WindowAdapter(){
  29.             public void windowClosing(WindowEvent e){
  30.                 System.exit(0);
  31.             }
  32.         });
  33.        
  34.         // Menu
  35.         JMenuBar menuBar = new JMenuBar();
  36.         fenster.setJMenuBar(menuBar);       
  37.         JMenu fichier = new JMenu();
  38.         JMenu about = new JMenu();       
  39.         JMenuItem quitter = new JMenuItem();
  40.         JMenuItem credits = new JMenuItem();       
  41.         fichier.setText("Fichier" );
  42.         fichier.add(quitter);       
  43.         quitter.setText("Quitter" );
  44.         quitter.setEnabled(true);
  45.        
  46.         // ActionListener pour le menu "quitter"
  47.         quitter.addActionListener(new ActionListener(){
  48.         public void actionPerformed(ActionEvent e){
  49.                 System.exit(0);
  50.             }
  51.         });
  52.        
  53.         // Menu, suite
  54.         about.setText("A Propos" );
  55.         about.add(credits);
  56.         credits.setText("Credits" );
  57.         credits.setEnabled(true);
  58.        
  59.         credits.addActionListener(new ActionListener(){
  60.         public void actionPerformed(ActionEvent e){
  61.                 System.exit(0); // A MODIFIER: METTRE UN POPUP !
  62.             }
  63.         });
  64.        
  65.         // Ajout du menu
  66.         menuBar.add(fichier);
  67.         menuBar.add(about);       
  68.        
  69.         // Fond
  70.         fenster.setBackground(Color.white);
  71.         // Bouton
  72.         JButton Ende = new JButton("Quitter" );
  73.         Ende.addActionListener(new ActionListener(){
  74.             public void actionPerformed(ActionEvent e){
  75.                 System.exit(0);
  76.             }
  77.         });
  78.        
  79.         // Ajout du bouton
  80.         fenster.add(Ende, BorderLayout.SOUTH);
  81.        
  82.         // Propriétés de la fenetre principale  
  83.         fenster.setSize(500,500);
  84.         fenster.setVisible(true);
  85.        
  86.         // Keylistener
  87.         fenster.addKeyListener(new Listener(this));
  88.         // FIN INTERFACE GRAPHIQE <-
  89.        
  90.         // Degré de pendaison initial: Structure
  91.         pendaison = 0;
  92.     }
  93.     ////////////////////////////////////////// Méthodes //////////////////////////////////////////
  94.    
  95.     // Etat++
  96.     public void incrementation()
  97.     {
  98.         pendaison ++;
  99.     }
  100. }


 
Affichage:

Code :
  1. // Composants graphiques
  2. import javax.swing.*;
  3. import java.awt.*;
  4. import java.awt.event.*;
  5. public class Affichage extends JPanel
  6. {
  7.     int pendaison;
  8.    
  9.     ////////////////////////////////////////// Constantes //////////////////////////////////////////
  10.    
  11.     // Constantes pour le degré de pendaison
  12.     private static final int STRUCTURE          = 0;
  13.     private static final int CORDE              = 1;
  14.     private static final int TETE               = 2;
  15.     private static final int CORPS              = 3;
  16.     private static final int BRAS_DROIT         = 4;
  17.     private static final int BRAS_GAUCHE        = 5;
  18.     private static final int JAMBE_DROITE       = 6;
  19.     private static final int JAMBE_GAUCHE       = 7;
  20.     private static final int PERDU              = 7;
  21.    
  22.     public Affichage(int unEtat)
  23.     {
  24.         pendaison = unEtat;
  25.     }
  26.     // Dessine le pendu
  27.     public void paintComponent(Graphics g)
  28.     {
  29.         // Hauteur et largeur
  30.         int y = getHeight() / 10;
  31.         int x = getWidth() / 10;
  32.        
  33.         switch(pendaison)
  34.         {
  35.             case JAMBE_GAUCHE :
  36.             // Jambre gauche
  37.             g.drawLine(6*x, 7*y, 5*x, 7*y + y/2);
  38.        
  39.             case JAMBE_DROITE :
  40.             // Jambre droite
  41.             g.drawLine(6*x, 7*y, 7*x, 7*y + y/2); 
  42.            
  43.             case BRAS_GAUCHE :
  44.             // Bras gauche
  45.             g.drawLine(6*x, 6*y, 5*x, 6*y + y/2);
  46.            
  47.             case BRAS_DROIT :
  48.             // Bras droit
  49.             g.drawLine(6*x, 6*y, 7*x, 6*y + y/2);
  50.            
  51.             case CORPS :
  52.             // Corps
  53.             g.drawLine(6*x, 6*y, 6*x, 7*y);
  54.            
  55.             case TETE :
  56.             // Tete
  57.             g.drawOval(5*x+x/2, 5*y, x, y);
  58.            
  59.             case CORDE :
  60.              // Corde
  61.             g.drawLine(6*x, 4*y, 6*x, 5*y);
  62.            
  63.             case STRUCTURE :
  64.             // Structure du pendu (toujours présent)
  65.             // Mat central
  66.             g.drawLine(4*x, 4*y, 4*x, 8*y);
  67.             g.drawLine(4*x+1, 4*y, 4*x+1, 8*y);
  68.        
  69.             // Barre du haut
  70.             g.drawLine(4*x, 4*y, 6*x, 4*y);
  71.             g.drawLine(4*x, 4*y+1, 6*x, 4*y+1);
  72.            
  73.             // Pied
  74.             g.drawLine(3*x, 8*y, 5*x, 8*y);
  75.             g.drawLine(3*x, 8*y+1, 5*x, 8*y+1);
  76.        
  77.             // Coude
  78.             g.drawLine(4*x, 5*y, 5*x, 4*y);
  79.             g.drawLine(4*x+1, 5*y, 5*x+1, 4*y);
  80.            
  81.             break;
  82.         }
  83.        
  84.             // Gagné !
  85.             //g.drawString("Vous avez gagné !", 4*x, 3*y);
  86.            
  87.             // Perdu !
  88.             if(pendaison == PERDU)
  89.             {
  90.                 g.drawString("Vous avez perdu !", 4*x, 3*y);
  91.             }
  92.         }
  93. }


 
Maintenant, comment faire afficher dans la JFrame (fenster) de Jeu, le JPanel d'affichage ? :sweat:


Message édité par ParadoX le 22-05-2006 à 22:23:53

---------------
Pier noir la mèr - La chanson par HFR Band - Topic TrueCrypt
n°1372682
gm_superst​ar
Appelez-moi Super
Posté le 22-05-2006 à 23:09:23  profilanswer
 

Ben tu crées un objet Affichage et tu l'ajoutes à ta fenêtre ! C'est JPanel avant tout :
 

Affichage affichage = new Affichage();
fenster.add(affichage, BorderLayout.CENTER);


 
par exemple


Message édité par gm_superstar le 22-05-2006 à 23:09:36

---------------
Incongru : une FAQ abandonnée sur les Standards du Web - FAQ périmée de blabla@Prog
n°1372688
ParadoX
Posté le 22-05-2006 à 23:16:20  profilanswer
 

Ahh ok :jap:  
Ok ça marche plus ou moins, maintenant j'aimerais faire marcher le KeyListener sur mon affichage ... il rentre ds le constructeur, mais ne capte pas la touche préssée :/


---------------
Pier noir la mèr - La chanson par HFR Band - Topic TrueCrypt
n°1372712
gm_superst​ar
Appelez-moi Super
Posté le 22-05-2006 à 23:26:56  profilanswer
 

C'est sans doute ton JButton qui doit capter le focus et donc rendre inopérant le keylistener sur la frame... Essaye d'enlever le bouton pour voir ?


---------------
Incongru : une FAQ abandonnée sur les Standards du Web - FAQ périmée de blabla@Prog
n°1372720
ParadoX
Posté le 22-05-2006 à 23:40:13  profilanswer
 

Jep, c'était ça ... mais maintenant, j'update mon compteur "pendaison", mais ... le dessin ne s'update pas en meme temps  :heink:  
Ya une astuce pour redessiner le truc ?


---------------
Pier noir la mèr - La chanson par HFR Band - Topic TrueCrypt
n°1372724
gm_superst​ar
Appelez-moi Super
Posté le 22-05-2006 à 23:43:49  profilanswer
 
mood
Publicité
Posté le 22-05-2006 à 23:43:49  profilanswer
 

n°1372726
ParadoX
Posté le 22-05-2006 à 23:52:36  profilanswer
 

Hm oui, mais seulement quand la valeur de "pendaison" change ...  :/
Je ne vois pas comment le faire ... faut un autre Listener ? :|


---------------
Pier noir la mèr - La chanson par HFR Band - Topic TrueCrypt
n°1372730
gm_superst​ar
Appelez-moi Super
Posté le 23-05-2006 à 00:06:41  profilanswer
 

Heu ben tu ajoutes le rapaint() dans ta méthode incrementation() ? Tu as eu la bonne idée de faire une méthode pour le changement d'état alors autant s'en servir.


---------------
Incongru : une FAQ abandonnée sur les Standards du Web - FAQ périmée de blabla@Prog
n°1372732
ParadoX
Posté le 23-05-2006 à 00:12:14  profilanswer
 

Mais Incrementation() est dans la classe Jeu, et le Paint() s'effectue dans Affichage  :sweat:  
 
Je reposte mon code actuel:
 
JEU:

Code :
  1. public class Jeu
  2. {
  3.     ////////////////////////////////////////// Attributs //////////////////////////////////////////
  4.    
  5.     private int pendaison;
  6.    
  7.     ////////////////////////////////////////// Constructeurs //////////////////////////////////////////
  8.    
  9.     public Jeu()
  10.     {   
  11.         pendaison = 0;
  12.         // DEBUT INTERFACE GRAPHIQE ->         
  13.         // Fenetre principale
  14.         JFrame fenster = new JFrame();       
  15.         fenster.setTitle("Le jeu du pendu" );
  16.         fenster.setLayout(new BorderLayout());
  17.        
  18.         // Window listener pour la fenetre principale
  19.         fenster.addWindowListener(new WindowAdapter(){
  20.             public void windowClosing(WindowEvent e){
  21.                 System.exit(0);
  22.             }
  23.         });
  24.        
  25.         // Menu
  26.         JMenuBar menuBar = new JMenuBar();
  27.         fenster.setJMenuBar(menuBar);       
  28.         JMenu fichier = new JMenu();
  29.         JMenu about = new JMenu();       
  30.         JMenuItem quitter = new JMenuItem();
  31.         JMenuItem credits = new JMenuItem();       
  32.         fichier.setText("Fichier" );
  33.         fichier.add(quitter);       
  34.         quitter.setText("Quitter" );
  35.         quitter.setEnabled(true);
  36.        
  37.         // ActionListener pour le menu "quitter"
  38.         quitter.addActionListener(new ActionListener(){
  39.         public void actionPerformed(ActionEvent e){
  40.                 System.exit(0);
  41.             }
  42.         });
  43.        
  44.         // Menu, suite
  45.         about.setText("A Propos" );
  46.         about.add(credits);
  47.         credits.setText("Credits" );
  48.         credits.setEnabled(true);
  49.        
  50.         credits.addActionListener(new ActionListener(){
  51.         public void actionPerformed(ActionEvent e){
  52.             // a remplir
  53.             }
  54.         });
  55.        
  56.         // Ajout du menu
  57.         menuBar.add(fichier);
  58.         menuBar.add(about);       
  59.        
  60.         // Fond
  61.         fenster.setBackground(Color.white);
  62.        
  63.         // Ajout du JPanel dans lequel le pendu sera dessiné
  64.         Affichage affichage = new Affichage(pendaison);
  65.         fenster.add(affichage, BorderLayout.CENTER);
  66.        
  67.         // Keylistener
  68.         fenster.addKeyListener(new Listener(this));
  69.        
  70.         // Propriétés de la fenetre principale  
  71.         fenster.setSize(500,500);
  72.         fenster.setVisible(true);
  73.         // FIN INTERFACE GRAPHIQE <-
  74.     }
  75.     ////////////////////////////////////////// Méthodes //////////////////////////////////////////
  76.    
  77.     // Etat++
  78.     public void incrementation()
  79.     {
  80.         pendaison ++;
  81.         //repaint();
  82.     }
  83.    
  84.     public void printPendaison()
  85.     {
  86.         System.out.println("Pendaison = " + pendaison);
  87.     }
  88. }


 
 
AFFICHAGE:

Code :
  1. public class Affichage extends JPanel
  2. {
  3.     int pendaison;
  4.    
  5.     ////////////////////////////////////////// Constantes //////////////////////////////////////////
  6.    
  7.     // Constantes pour le degré de pendaison
  8.     private static final int STRUCTURE          = 0;
  9.     private static final int CORDE              = 1;
  10.     private static final int TETE               = 2;
  11.     private static final int CORPS              = 3;
  12.     private static final int BRAS_DROIT         = 4;
  13.     private static final int BRAS_GAUCHE        = 5;
  14.     private static final int JAMBE_DROITE       = 6;
  15.     private static final int JAMBE_GAUCHE       = 7;
  16.     private static final int PERDU              = 7;
  17.    
  18.     public Affichage(int unEtat)
  19.     {
  20.         pendaison = unEtat;
  21.     }
  22.     // Dessine le pendu
  23.     public void paintComponent(Graphics g)
  24.     {
  25.         // Hauteur et largeur
  26.         int y = getHeight() / 10;
  27.         int x = getWidth() / 10;
  28.        
  29.         switch(pendaison)
  30.         {
  31.             case JAMBE_GAUCHE :
  32.             // Jambre gauche
  33.             g.drawLine(6*x, 7*y, 5*x, 7*y + y/2);
  34.        
  35.             case JAMBE_DROITE :
  36.             // Jambre droite
  37.             g.drawLine(6*x, 7*y, 7*x, 7*y + y/2); 
  38.            
  39.             case BRAS_GAUCHE :
  40.             // Bras gauche
  41.             g.drawLine(6*x, 6*y, 5*x, 6*y + y/2);
  42.            
  43.             case BRAS_DROIT :
  44.             // Bras droit
  45.             g.drawLine(6*x, 6*y, 7*x, 6*y + y/2);
  46.            
  47.             case CORPS :
  48.             // Corps
  49.             g.drawLine(6*x, 6*y, 6*x, 7*y);
  50.            
  51.             case TETE :
  52.             // Tete
  53.             g.drawOval(5*x+x/2, 5*y, x, y);
  54.            
  55.             case CORDE :
  56.              // Corde
  57.             g.drawLine(6*x, 4*y, 6*x, 5*y);
  58.            
  59.             case STRUCTURE :
  60.             // Structure du pendu (toujours présent)
  61.             // Mat central
  62.             g.drawLine(4*x, 4*y, 4*x, 8*y);
  63.             g.drawLine(4*x+1, 4*y, 4*x+1, 8*y);
  64.        
  65.             // Barre du haut
  66.             g.drawLine(4*x, 4*y, 6*x, 4*y);
  67.             g.drawLine(4*x, 4*y+1, 6*x, 4*y+1);
  68.            
  69.             // Pied
  70.             g.drawLine(3*x, 8*y, 5*x, 8*y);
  71.             g.drawLine(3*x, 8*y+1, 5*x, 8*y+1);
  72.        
  73.             // Coude
  74.             g.drawLine(4*x, 5*y, 5*x, 4*y);
  75.             g.drawLine(4*x+1, 5*y, 5*x+1, 4*y);
  76.            
  77.             break;
  78.         }
  79.        
  80.             // Gagné !
  81.             //g.drawString("Vous avez gagné !", 4*x, 3*y);
  82.            
  83.             // Perdu !
  84.             if(pendaison == PERDU)
  85.             {
  86.                 g.drawString("Vous avez perdu !", 4*x, 3*y);
  87.             }
  88.         }



---------------
Pier noir la mèr - La chanson par HFR Band - Topic TrueCrypt
n°1372735
gm_superst​ar
Appelez-moi Super
Posté le 23-05-2006 à 00:18:42  profilanswer
 

ParadoX a écrit :

Mais Incrementation() est dans la classe Jeu, et le Paint() s'effectue dans Affichage  :sweat:  


Et ? Tu peux pas appeler le repaint() d'Affichage ?


---------------
Incongru : une FAQ abandonnée sur les Standards du Web - FAQ périmée de blabla@Prog
n°1372737
ParadoX
Posté le 23-05-2006 à 00:22:07  profilanswer
 

gm_superstar a écrit :

Et ? Tu peux pas appeler le repaint() d'Affichage ?


 
Ben je ne vois pas comment, la seule instance d'Affichage que j'ai ds Jeu est "affichage", et elle n'existe que dans le constructeur. Par ailleurs, la méthode repaint() n'est pas définie dans Affichage ... faut-il que je le fasse moi-même ?


---------------
Pier noir la mèr - La chanson par HFR Band - Topic TrueCrypt
n°1372739
gm_superst​ar
Appelez-moi Super
Posté le 23-05-2006 à 00:25:22  profilanswer
 

ParadoX a écrit :

Ben je ne vois pas comment, la seule instance d'Affichage que j'ai ds Jeu est "affichage", et elle n'existe que dans le constructeur.


Ben il serait temps d'en faire une donnée membre de ta classe Jeu non ?

ParadoX a écrit :

Par ailleurs, la méthode repaint() n'est pas définie dans Affichage ... faut-il que je le fasse moi-même ?


repaint() est une méthode de JPanel (de JComponent en fait)


---------------
Incongru : une FAQ abandonnée sur les Standards du Web - FAQ périmée de blabla@Prog
n°1372741
ParadoX
Posté le 23-05-2006 à 00:37:29  profilanswer
 

gm_superstar a écrit :

Ben il serait temps d'en faire une donnée membre de ta classe Jeu non ?
 
repaint() est une méthode de JPanel (de JComponent en fait)


 
Ah d'accord :jap:  
Ok, j'ai donc rajouté dans Jeu:
 

Code :
  1. private Affichage monAffichage;


...
et plus bas:
 

Code :
  1. Affichage affichage = new Affichage(pendaison);
  2. fenster.add(affichage, BorderLayout.CENTER);
  3. monAffichage = affichage; // Nouvel ajout


 
Mais maintenant (désolé :D), il me redessine un truc tout moche par dessus, et quand je passe une fenetre windows devant pour "nettoyer" le truc, je vois qu'il n'a redessiné que le mat de départ, sans avoir mis à jour "pendaison".  
 
En vérifiant, "pendaison" est bel et bien incrémenté, mais .. affichage ne le prends pas en compte :/
 


---------------
Pier noir la mèr - La chanson par HFR Band - Topic TrueCrypt
n°1372760
ParadoX
Posté le 23-05-2006 à 01:32:22  profilanswer
 

Problème résolu :o


Message édité par ParadoX le 23-05-2006 à 02:26:54

---------------
Pier noir la mèr - La chanson par HFR Band - Topic TrueCrypt

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  [JAVA Débutant] KeyListerner sur JFrame OK, mais sur un JPanel ?

 

Sujets relatifs
placer les jpanel et jcontainer sur frame[débutant][java]convertir html en xml
[débutant]convertir html en xmlJava : comment ça marche les double ?
Port parallele, matlab javaJava -> Date, probleme d exception ?!
[JAVA Débutant] JPanel, JFrame et Paint() --> Help :( 
Plus de sujets relatifs à : [JAVA Débutant] KeyListerner sur JFrame OK, mais sur un JPanel ?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR