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

  FORUM HardWare.fr
  Programmation
  Java

  Attendre une frappe clavier pour réaliser une action

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Attendre une frappe clavier pour réaliser une action

n°1633219
basile238
Posté le 29-10-2007 à 19:23:18  profilanswer
 

Bonjour,
 
je suis en train de réaliser une application en JAVA.
C'est pas un applet, ni du swing. Je travaille en plein écran (je sais pas si ça peut avoir une importance).
Toujours est-il que je ne trouve pas le moyen de déclencher un son sur une frappe de la barre d'espace (ou de n'importe quelle touche du clavier).
 
Jusqu'à présent j'ai créé une sous-classe de Component, à laquelle j'ajoute une sous-classe de KeyAdapter par la méthode addKeyListener(). Dans cette sous-classe, j'ai bien redéfini la fonction KeyPressed pour qu'elle déclenche des sons de cette manière:
 
 
public void keyPressed(KeyEvent e){
   
   try{  
    v.play();
   } catch(Exception exception)
    {
     System.out.println("Erreur ligne 26 de GestionClavierPressed.java" );
    }
   
 }  
 
Bref, y a pas de son, alors que mes fonctions sonores marchent parfaitement par ailleurs, si je n'essaye pas de les lancer via un KeyListener.
 
Des idées ?
 
Merci d'avance pour votre aide.

Message cité 1 fois
Message édité par basile238 le 29-10-2007 à 19:23:59
mood
Publicité
Posté le 29-10-2007 à 19:23:18  profilanswer
 

n°1634111
basile238
Posté le 30-10-2007 à 20:57:37  profilanswer
 

Bon, désolé de me répondre à moi-même mais sérieux, c'est impossible en java de gérer une frappe au clavier ?
Ca fait deux jours que je cherche presque à plein temps et je n'y arrive toujours pas.
 
Je prends tous vos conseils.
 
Pour commencer et pour simplifier, j'aimerais réaliser une application qui fasse un bip quand je frappe sur n'importe quelle touche du clavier.
 
Je sais comment faire un bip: Toolkit.getDefaultToolkit().beep();
Pouvez-vous m'aider pour le reste ?
 
Je vous en prie! Je suis vraiment déséspéré.

n°1634935
Zipo
Ours bipolaire
Posté le 31-10-2007 à 20:42:34  profilanswer
 

basile238 a écrit :

Bonjour,
 
je suis en train de réaliser une application en JAVA.
C'est pas un applet, ni du swing.


 
pas un applet, ni du swing ... ça serait plus facile si tu disais directement ce que c'est :d
 
vu le code que tu utilises plus loins avec le KeyEvent, je suppose que tu utilises donc awt.
Et je vois pas où est ton problème, une fois ton component awt défini tu n'as qu'à faire par exemple (pour la touche espace) :

Code :
  1. tonComponent.addKeyListener(new KeyListener(){
  2.   public void keyPressed(KeyEvent arg0) {
  3.    if(arg0.getKeyCode() == KeyEvent.VK_SPACE){
  4.     Toolkit.getDefaultToolkit().beep();
  5.    }
  6.   }
  7.   public void keyReleased(KeyEvent arg0) {}
  8.   public void keyTyped(KeyEvent arg0) {}
  9.  });
  10. }


 
 

basile238 a écrit :

Je travaille en plein écran (je sais pas si ça peut avoir une importance).


euuuuh ?


---------------
- mon feed-back
n°1640689
basile238
Posté le 10-11-2007 à 15:34:30  profilanswer
 

C'est exactement ce que j'ai fait et ça marche pas.
Mon component est un objet Window.
Rien à faire, il ne reconnaît pas les frappes claviers.
Je suis désespéré.

n°1640702
basile238
Posté le 10-11-2007 à 16:23:06  profilanswer
 

Bon, j'ai supprimé tout ce qui n'avais pas de rapport avec l 'écran et le clavier dans mon code.
Ca donne les deux fichiers suivants:
 

Code :
  1. import java.util.*;
  2. import java.awt.*;
  3. import java.awt.image.*;
  4. public class PleinEcran{
  5. /* fonction passant en plein écran et renvoyant un objet Graphics  
  6. * permettant de dessiner dessus
  7. */
  8. public static Window ECRAN_PRINCIPAL = null;
  9. public static Graphics pleinEcran(){
  10. //Récupération de l’environnement graphique disponible à notre //application
  11. GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
  12. //Récupération de l’écran
  13. GraphicsDevice gd = ge.getDefaultScreenDevice();
  14.    // Création des fenêtres d’affichage
  15.    Frame frame = new Frame(gd.getDefaultConfiguration());
  16.      Window win = new Window(frame);
  17. // Passage au mode plein écran
  18.    gd.setFullScreenWindow(win);
  19.         win.requestFocus();
  20. //Sélection de la résolution et de la profondeur de couleur
  21.  DisplayMode[] affichages = gd.getDisplayModes();
  22. for(int i=0;i<affichages.length;i++){
  23.       if((affichages[i].getWidth()==1025)&&(affichages[i].getHeight()==768)&&(affichages[i].getBitDepth()==32)){
  24.    gd.setDisplayMode(affichages[i]);
  25.   }
  26. }
  27. //Taille de l’écran
  28.         int screenWidth = win.getWidth();
  29.         int screenHeight = win.getHeight();
  30. // Récupération de l’instance de ‘Graphics’ correspondant à l’écran
  31. Graphics graphicwindow = win.getGraphics();
  32. // Création du tampon qui représentera les pixels de
  33. // ‘MemoryImageSource’
  34.     int size = screenWidth * screenHeight;
  35. int[] pixels = new int[size];
  36. //Création de la ‘MemoryImageSource’
  37. MemoryImageSource source = new MemoryImageSource(screenWidth, screenHeight, pixels, 0, screenWidth);
  38. //Spécifie qu’il s’agit d’une animation avec une succession d’images
  39. source.setAnimated(true);
  40.        //A chaque fois qu’il y’aura un changement on mets à jour toute
  41.        //l’image
  42. source.setFullBufferUpdates(true);
  43. //Création de l’image associée à ‘MemoryImageSource’
  44. Image offscreen = Toolkit.getDefaultToolkit().createImage(source);
  45. ECRAN_PRINCIPAL = win;
  46. return graphicwindow;
  47. }


 
Le fichier ci-dessus a toujours fonctionné pour tout ce qui est affichage en plein écran.
 
Et voici, l'aspect "gestion des frappes clavier" réduit à sa plus simple expression:
 

Code :
  1. import java.awt.*;
  2. import java.awt.event.*;
  3. public class EcranMerde extends KeyAdapter{
  4. public void keyReleased(KeyEvent e){
  5.  Toolkit.getDefaultToolkit().beep();
  6. }
  7. public static void main(String[] args){
  8.  PleinEcran.pleinEcran();
  9.  PleinEcran.ECRAN_PRINCIPAL.addKeyListener(new EcranMerde());
  10. }
  11. }


 
Et ben ça marche pas.
Rien ne se passe  quand je frappe sur le clavier.
 
Rassurez-vous, j'ai bien vérifier que "Toolkit.getDefaultToolkit().beep();" fonctionne bien tout seul.
Je cherche donc à comprendre pourquoi ma fonction keyReleased n'est jamais appelée même quand j'appuie et je relâche le clavier des milliards de fois.
 
Merci aux âmes d'une infinité bonté qui voudront bien essayer de m'aider à sortir de là.

n°1640723
Zipo
Ours bipolaire
Posté le 10-11-2007 à 18:25:32  profilanswer
 

J'ai modifié 2 truc dans ton code, et ça marche :) :
 
dans EcranMerde.java :

Code :
  1. PleinEcran.ECRAN_PRINCIPAL.getOwner().addKeyListener(new EcranMerde());


 
dans PleinEcran.java :

Code :
  1. frame.setVisible(true);


 
Ce qui donne au final :
 

Code :
  1. import java.awt.*;
  2. import java.awt.event.*;
  3. public class EcranMerde extends KeyAdapter {
  4. public void keyReleased(KeyEvent e) {
  5.  Toolkit.getDefaultToolkit().beep();
  6. }
  7. public static void main(String[] args) {
  8.  PleinEcran.pleinEcran();
  9.  PleinEcran.ECRAN_PRINCIPAL.getOwner().addKeyListener(new EcranMerde());
  10. }
  11. }


 
et
 

Code :
  1. import java.util.*;
  2. import java.awt.*;
  3. import java.awt.image.*;
  4. public class PleinEcran {
  5. /*
  6.  * fonction passant en plein écran et renvoyant un objet Graphics permettant
  7.  * de dessiner dessus
  8.  */
  9. public static Window ECRAN_PRINCIPAL = null;
  10. public static Graphics pleinEcran() {
  11.  // Récupération de l’environnement graphique disponible à notre
  12.  // //application
  13.  GraphicsEnvironment ge = GraphicsEnvironment
  14.    .getLocalGraphicsEnvironment();
  15.  // Récupération de l’écran
  16.  GraphicsDevice gd = ge.getDefaultScreenDevice();
  17.  // Création des fenêtres d’affichage
  18.  Frame frame = new Frame(gd.getDefaultConfiguration());
  19.  Window win = new Window(frame);
  20.  // Passage au mode plein écran
  21.  gd.setFullScreenWindow(win);
  22.  win.requestFocus();
  23.  // Sélection de la résolution et de la profondeur de couleur
  24.  DisplayMode[] affichages = gd.getDisplayModes();
  25.  for (int i = 0; i < affichages.length; i++) {
  26.   if ((affichages[i].getWidth() == 1025)
  27.     && (affichages[i].getHeight() == 768)
  28.     && (affichages[i].getBitDepth() == 32)) {
  29.    gd.setDisplayMode(affichages[i]);
  30.   }
  31.  }
  32.  // Taille de l’écran
  33.  int screenWidth = win.getWidth();
  34.  int screenHeight = win.getHeight();
  35.  // Récupération de l’instance de ‘Graphics’ correspondant à l’écran
  36.  Graphics graphicwindow = win.getGraphics();
  37.  // Création du tampon qui représentera les pixels de
  38.  // ‘MemoryImageSource’
  39.  int size = screenWidth * screenHeight;
  40.  int[] pixels = new int[size];
  41.  // Création de la ‘MemoryImageSource’
  42.  MemoryImageSource source = new MemoryImageSource(screenWidth,
  43.    screenHeight, pixels, 0, screenWidth);
  44.  // Spécifie qu’il s’agit d’une animation avec une succession d’images
  45.  source.setAnimated(true);
  46.  // A chaque fois qu’il y’aura un changement on mets à jour toute
  47.  // l’image
  48.  source.setFullBufferUpdates(true);
  49.  // Création de l’image associée à ‘MemoryImageSource’
  50.  Image offscreen = Toolkit.getDefaultToolkit().createImage(source);
  51.  ECRAN_PRINCIPAL = win;
  52.  frame.setVisible(true);
  53.  return graphicwindow;
  54. }
  55. }


 
Chez moi l'appel à Toolkit.getDefaultToolkit().beep(); ne marche pas (aucun beep ne se fait entendre :d) alors pour tester j'ai remplacé par System.out.println("beep!" ); et ça s'affiche dans la console. Mais si chez toi le beep() fonctionne, alors c'est bon :)
 
:hello:


---------------
- mon feed-back
n°1640845
basile238
Posté le 11-11-2007 à 10:42:28  profilanswer
 

Salut et merci pour ta réponse,
 
tu es sûr que ça marche chez toi ?
Parce-que j'ai fait la modif que tu proposes et ça ne fonctionne toujours pas.
J'ai ensuite même copié-collé exactement les sources que tu me donnes (au cas où tu ais fait une modif que tu aurais oublié de mentionner). Résultat: c'est toujours pareil.
Ni bip, ni écriture de "beep!" dans la console (oui, j'ai aussi essayé en remplaçant le beep par un System.out.println).
 
Là vraiment, je ne comprends plus rien. Si ça marche chez toi et qu'en copiant-collant exactement ce que tu as fait (sans rajouter rien d'autre, juste ces deux fichiers, exactement et seulement les mêmes fichiers), ça ne marche pas chez moi, que puis-je conclure à part que je suis maudit ?


Message édité par basile238 le 11-11-2007 à 10:42:55
n°1641094
Zipo
Ours bipolaire
Posté le 11-11-2007 à 18:34:24  profilanswer
 

ben ouai ça marche :d
 
je suis sur eclipse, jre 1.6.0_03 :)
 
tu cliques sur la fenêtre qui arrive en full screen avant de taper sur les touches ? parcequ'il faut que la fenêtre ait le focus


---------------
- mon feed-back
n°1642318
basile238
Posté le 13-11-2007 à 16:48:53  profilanswer
 

Oui, je cliquais bien sur la fenêtre et ça marchait pas.
Mais maintenant, j'ai trouvé: je fait alt-tab, je cliques sur la frame,puis je double clique sur la fenêtre iconisée et... ça marche! Le logiciel est destiné uniquement à mon travail perso donc ça ne m'ennuie pas de faire ce petit cérémonial à chaque fois.
 
En tout cas, merci beaucoup pour ton aide. Sans les lignes que tu as modifiée/rajoutée, ça ne marcherait pas.
Merci à toi!!!


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

  Attendre une frappe clavier pour réaliser une action

 

Sujets relatifs
Exécuter partiellement une Action StrutsPerte de focus clavier inexpliqué, aide bienvenue !
[wxWidgets] Clavier EVT_CHAR et EVT_KEY_UP[Flash] Comment réaliser un menu horizontal ?
vba touche clavierentrer du texte au clavier sans l'afficher, sous bash.
[FLASH/Action Script 2.0] Comment modifier un fichier XMLDétection d'une seule touche clavier (ou combinaison de 2 touches)
mettre en "surbrillance" par validation claviernoob html suite ----- onclick sans nouvelle fenetre
Plus de sujets relatifs à : Attendre une frappe clavier pour réaliser une action


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