Java keyListener multi touche
Résolu/Fermé
walidovich_85
Messages postés
608
Date d'inscription
mardi 12 janvier 2010
Statut
Membre
Dernière intervention
25 octobre 2015
-
Modifié par irongege le 29/03/2013 à 19:54
walidovich_85 Messages postés 608 Date d'inscription mardi 12 janvier 2010 Statut Membre Dernière intervention 25 octobre 2015 - 30 mars 2013 à 20:08
walidovich_85 Messages postés 608 Date d'inscription mardi 12 janvier 2010 Statut Membre Dernière intervention 25 octobre 2015 - 30 mars 2013 à 20:08
A voir également:
- Java keyListener multi touche
- Waptrick java football - Télécharger - Jeux vidéo
- Jeux java itel football - Télécharger - Jeux vidéo
- Touche rémanente - Guide
- Java apk - Télécharger - Langages
- Touche insert - Guide
1 réponse
KX
Messages postés
16753
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 019
29 mars 2013 à 18:55
29 mars 2013 à 18:55
Tu peux avoir des problèmes si tu appuies par exemple sur [Shift] puis [C], car car ton code va ajouter le caractère 'C' (en majuscule), mais si tu relèves la touche [Shift] en gardant la touche [C] enfoncée, tu vas ajouter 'c' (minuscule) et tu vas avoir donc 'c' et 'C' en même temps. Quand tu relèveras la touche [C] seul le 'c' va être enlevé, et le 'C' va rester même si aucune touche n'est plus appuyée...
Puisque ce sont les touches qui t'intéresse (et non les caractères qu'ils représentent), je te conseille de considérer les KeyCode ou ExtendedKeyCode plutôt que les getChar, tu n'auras donc plus de problème de ce genre...
PS. J'ai pas mal amélioré le code ;-)
Puisque ce sont les touches qui t'intéresse (et non les caractères qu'ils représentent), je te conseille de considérer les KeyCode ou ExtendedKeyCode plutôt que les getChar, tu n'auras donc plus de problème de ce genre...
PS. J'ai pas mal amélioré le code ;-)
import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import java.util.TreeSet; import javax.swing.JFrame; import javax.swing.JLabel; class MultipleListener implements KeyListener { private TreeSet<Integer> set = new TreeSet<Integer>(); private final JLabel label; private final String EMPTY = "Press Any Key"; public MultipleListener() { System.out.println(set); label = new JLabel(EMPTY,JLabel.CENTER); } public JLabel getLabel() { return label; } @Override public void keyPressed(KeyEvent e) { if (set.add(e.getExtendedKeyCode())) { System.out.println(set); label.setText(set.toString()); } } @Override public void keyReleased(KeyEvent e) { if(set.remove(e.getExtendedKeyCode())) { System.out.println(set); if (set.isEmpty()) label.setText(EMPTY); else label.setText(set.toString()); } } @Override public void keyTyped(KeyEvent e) { } } public class Test { public static void main(String[] args) { JFrame frame = new JFrame(); frame.setSize(200,100); MultipleListener listener = new MultipleListener(); frame.add(listener.getLabel()); frame.addKeyListener(listener); frame.setLocationRelativeTo(null); frame.setVisible(true); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } }
29 mars 2013 à 19:22
enfait le code fonctionne bien, et il va me prendre du temps pr bien le comprendre.
je vois encore, la limitation en terme des touches empilées ( ce probleme, je peux le dépasser puisk je vise pas à utiliser des dizaines), mais cette limitation est instable !!!! (dépend de la touche et son ordre d'empilement).
j'était sur le web en recherche, et je rencontre souvent des propositions pour des cas plus ou moins similaire, des propositions d'introduire des threads, pour permettre les multi tache... c quoi votre point de vue pour une solution dans ce sens?
Merci encore.
Modifié par KX le 29/03/2013 à 19:40
Personnellement j'arrive à atteindre 10 touches en même temps (mais pas n'importe lesquelles et ça dépend de l'ordre dans lesquels on les appuies). Après c'est surement possible de faire plus, mais je n'ai pas assez de doigts pour essayer.
Il faudrait tester avec deux claviers, cela permettrait surement de générer deux codes claviers en même temps, et donc dépasser le problème matériel, permettant un appui simultané sur un plus grand ensemble de touches en même temps...
29 mars 2013 à 19:40
Alors là bravo !!
On à enfin là solution et sans Thread en plus, moi qui ne les aime pas.
Merci KX.
29 mars 2013 à 19:42
l'empilement ne fonctionne pas bien si je combine des touches en vertical. mais en horizontal, c preske nikel. !!!
je sais pas s'il ya des explications pr ça. mais merci pour l'aide.
29 mars 2013 à 19:47