Attendre une frappe clavier pour réaliser une action - Java - Programmation
Marsh Posté le 30-10-2007 à 20:57:37
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é.
Marsh Posté le 31-10-2007 à 20:42:34
basile238 a écrit : Bonjour, |
pas un applet, ni du swing ... ça serait plus facile si tu disais directement ce que c'est
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 :
|
basile238 a écrit : Je travaille en plein écran (je sais pas si ça peut avoir une importance). |
euuuuh ?
Marsh Posté le 10-11-2007 à 15:34:30
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é.
Marsh Posté le 10-11-2007 à 16:23:06
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 :
|
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 :
|
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à.
Marsh Posté le 10-11-2007 à 18:25:32
J'ai modifié 2 truc dans ton code, et ça marche :
dans EcranMerde.java :
Code :
|
dans PleinEcran.java :
Code :
|
Ce qui donne au final :
Code :
|
et
Code :
|
Chez moi l'appel à Toolkit.getDefaultToolkit().beep(); ne marche pas (aucun beep ne se fait entendre ) 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
Marsh Posté le 11-11-2007 à 10:42:28
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 ?
Marsh Posté le 11-11-2007 à 18:34:24
ben ouai ça marche
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
Marsh Posté le 13-11-2007 à 16:48:53
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!!!
Marsh Posté le 29-10-2007 à 19:23:18
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 édité par basile238 le 29-10-2007 à 19:23:59