Partage
  • Partager sur Facebook
  • Partager sur Twitter

Récupérer les données du clavier

    14 avril 2012 à 22:59:00

    Bonsoir à tous :)

    Je cherche depuis quelque temps déjà comment récupérer les données du clavier dans un programme où j'ouvre une fenêtre.
    Je voudrais par exemple, au lieu de faire bouger un rond avec des boutons, le déplacer avec des touches du clavier... (je ne parle donc pas de la programmation en console)
    J'ai déjà regardé pas mal de sites, sans trouver d'explication qui semble fonctionner. :-°
    Ce ne serait pas non plus dans le cadre d'applet. Dans mon programme, j'ouvre ma fenêtre, un rond apparaît, et j'aimerais le bouger avec des touches du clavier.
    Les explications que j'ai trouvées sont soit en anglais, soit elles ne fonctionnent pas, ou encore les deux... :euh:
    Vu que je suis débutant, si quelqu'un pouvait me mettre la classe entière (interface), ce serait super sympa ;) Merci à tous ceux qui pourraient m'aider
    • Partager sur Facebook
    • Partager sur Twitter
      14 avril 2012 à 23:21:26

      Ton rond tu le dessines avec quoi ? AWT ? Swing ? Il faut que tu regardes du coté de ta librairie pour un Listener du style KeyListener pour capturer la touche pressé.
      • Partager sur Facebook
      • Partager sur Twitter
        14 avril 2012 à 23:28:22

        Mon rond avec AWT. En fait je veux juste modifier une variable en appuyant sur une touche du clavier. j'ai déjà un code d'interface clavier, mais il ne marche pas :

        import java.awt.event.*;
        
        	
        	public class Clavier  implements KeyListener {
        	    
        	
        	    private int sauter = 0;
        	    private int déplacementDroit = 0;
        	    private int déplacementGauche = 0;
        	
        	
        	
        	   
        	    
        	    public void keyTyped(KeyEvent e) {
        	       
        	    }
        
        	    
        	    public void keyPressed(KeyEvent e) {
        	       
        	        
        	    	if (e.getKeyCode() == KeyEvent.VK_SPACE)
        	        	System.out.println("cool");
        	       
        	    }
        
        	    
        	    public void keyReleased(KeyEvent e) {
        	        
        	    }
        	    
        	  
        	
        	
        	public int getSauter() {
            	return sauter;        	
            }
            
            public void setSauter(int sauter) {
                this.sauter = sauter;
        	}
            
            
            public int getDéplacementDroit() {
            	return déplacementDroit;        	
            }
            
            public void setDéplacementDroit(int déplacementDroit) {
                this.déplacementDroit = déplacementDroit;
        	}
            
            
            public int getDéplacementGauche() {
            	return déplacementGauche;        	
            }
            
            public void setDéplacementGauche(int déplacementGauche) {
                this.déplacementGauche = déplacementGauche;
        	}
        	
        	
        }
        


        ça me permettrait de faire sauter un personnage (juste une image, ou bien mon rond, peu importe), et de le déplacer...
        Merci pour ta réponse, peut être as-tu d'autres infos ;)


        EDIT : Bon j'ai trouvé ce code ici, et j'avoue ne pas tout comprendre... C'est sans doute pas très compliqué, mais déjà trop pour mon niveau =P
        Si quelqu'un veut bien m'aider, ce serait super ;)


        EDIT 2 : Je viens de voir que le code ci-dessus peut être utile si je laisse un champ à remplir... Y a-t-il une interface permettant de modifier des variables en fonction des touches du clavier appuyées, mais sans prévoir de champ de texte à cet effet ? (comme dans un jeu vidéo, quand on déplace un personnage, avec des touches...). Merci pour votre aide
        • Partager sur Facebook
        • Partager sur Twitter
          15 avril 2012 à 21:12:52

          Bonsoir :)

          C'est vrai que la gestion des événements n'est pas forcément intuitive au premier abord.

          En fait il faut que tu implémente les fonctions de KeyListener directement dans ta classe de fenêtre, et non dans 2 classes différents.

          Ton code doit donc ressembler à ça :

          import java.awt.Frame;
          import java.awt.event.*;
          
          	
          public class Fenetre extends Frame implements KeyListener {
          	    
          	public Fenetre() {
          		// Le code d'initialisation de la fenêtre
          	}
              
          	public void keyTyped(KeyEvent e) {
          		// Code exécuté lorsqu'une touche a été tappée 
          	}
          
              
          	public void keyPressed(KeyEvent e) {
          		// Code exécuté lorsqu'une touche est enfoncée
          	}
          
              
          	public void keyReleased(KeyEvent e) {
          		// Code exécuté lorsqu'une touche est relâchée
          	}
          }
          

          Voilà c'est difficile d'être plus clair. Si tu n'as pas compris, envoie tout ton code source et je te donnerai le code qui marche, pour que tu puisse comprendre avec un exemple concret.
          • Partager sur Facebook
          • Partager sur Twitter
            15 avril 2012 à 22:44:35

            Ah oui je suis bête merci beaucoup je n'y avais pas pensé :p

            Par contre je l'ai essayé, et il doit y avoir un petit problème... Désolé de t'embêter avec ça :o

            Mon code :
            import java.awt.BorderLayout;
            import java.awt.event.*;
            
            import javax.swing.JFrame;
            import javax.swing.JPanel;
            
            	
            public class Fenetre extends JFrame implements KeyListener {
            	    
            	
            	
            	private Panneau pan = new Panneau();
                private JPanel container = new JPanel();
                
                
                
                public Fenetre(){
                        
                        this.setTitle("Jeu qui ne marche pas...");
                        this.setSize(500, 500);
                        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                        this.setLocationRelativeTo(null);
                        this.setResizable(false);
                        
                        container.setLayout(new BorderLayout());
                        container.add(pan, BorderLayout.CENTER);
                        
                        
                        
                        this.setContentPane(container);
                        this.setVisible(true);
                    
            	}
                
            	public void keyTyped(KeyEvent e) {
            		
                    	System.out.println("=)");
            	}
            
                
            	public void keyPressed(KeyEvent e) {
            
            		
                    	System.out.println("=/");
            		
            	}
            
                
            	public void keyReleased(KeyEvent e) {
            		
                    	System.out.println("=(");
            	}
            }
            


            Par contre, j'utilise JFrame au lieu de Frame... J'avais vu ça sur le tuto de Cysboy.

            Merci quand même =)
            • Partager sur Facebook
            • Partager sur Twitter
              15 avril 2012 à 23:15:21

              Toutes mes excuses, le code que je t'ai donné ne fonctionnait effectivement pas... Apparemment on ne peut pas implémenter de KeyEvent directement dans une Frame. ça m'apprendra à donner des conseils sans tester mes codes...

              Enfin bref, j'ai pu récupérer un code sur internet qui utilise la classe KeyEventDispatcher, et qui lui a l'air de marcher :
              import java.awt.BorderLayout;
              import java.awt.KeyEventDispatcher;
              import java.awt.KeyboardFocusManager;
              import java.awt.event.KeyEvent;
              
              import javax.swing.JFrame;
              import javax.swing.JPanel;
              
              public class Fenetre extends JFrame {
              	private Panneau pan = new Panneau();
                  private JPanel container = new JPanel();
              	
                  private class MyDispatcher implements KeyEventDispatcher {
                      @Override
                      public boolean dispatchKeyEvent(KeyEvent e) {
                      	switch (e.getID()) {
                      	case KeyEvent.KEY_PRESSED :
                              System.out.println("Vous venez d'appuyer sur la touche "+ e.getKeyChar() +" (code "+ e.getKeyCode() +")");
                              break;
                      	case KeyEvent.KEY_RELEASED :
                              System.out.println("Vous venez de relacher la touche "+ e.getKeyChar() +" (code "+ e.getKeyCode() +")");
                              break;
                      	case KeyEvent.KEY_TYPED :
                      		System.out.println("Vous venez de taper sur la touche "+ e.getKeyChar());
                      		break;
                      	}
                          return false;
                      }
                  }
                  public Fenetre() {
                      
                      this.setTitle("Jeu qui marche...");
                      this.setSize(500, 500);
                      this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                      this.setLocationRelativeTo(null);
                      this.setResizable(false);
                      
                      container.setLayout(new BorderLayout());
                      container.add(pan, BorderLayout.CENTER);
                      
                      this.setContentPane(container);
                      this.setVisible(true);
                      
                      KeyboardFocusManager manager = KeyboardFocusManager.getCurrentKeyboardFocusManager();
                      manager.addKeyEventDispatcher(new MyDispatcher());
                  }
              }
              


              Voili voilou ^^ Bon courage
              • Partager sur Facebook
              • Partager sur Twitter
                15 avril 2012 à 23:23:58

                Merci beaucoup pour tout t'es génial je teste ça tout de suite ;)
                En effet c'est un peu plus compliqué =P

                EDIT : après essai, parfait, tout fonctionne. Merci encore =)
                • Partager sur Facebook
                • Partager sur Twitter

                Récupérer les données du clavier

                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                • Editeur
                • Markdown