IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Java Discussion :

Problème avec KeyListener


Sujet :

Langage Java

  1. #1
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2012
    Messages : 59
    Points : 50
    Points
    50
    Par défaut Problème avec KeyListener
    Bonjour,

    Je cherche à faire quelque chose de simple :

    quand je presse la flèche du haut, cela doit incrémenter une valeur et quand je presse celle du bas, cela doit décrémenter la valeur.

    J'ai recherché des solutions pour ce faire en java et j'ai trouvé la classe KeyListener.

    Dans ma classe qui contient la valeur que j'incrémente, j'ai écrit ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    class C_KeyBoardListener implements KeyListener {
     
    		private C_Point point;
     
    		public C_KeyBoardListener(C_Point in_point) {
    			this.point = in_point;
    		}
     
    		public void keyPressed(KeyEvent event) {
     
    			System.out.println ("PRESSEEEEEED");
     
    			if (event.getKeyCode() == KeyEvent.VK_KP_DOWN) {
    				this.point.setZ(this.point.getZ() - 10);
    			} else if (event.getKeyCode() == KeyEvent.VK_KP_UP) {
    				this.point.setZ(this.point.getZ() + 1);
    			}
    		}
     
    		public void keyReleased(KeyEvent arg0) {
    		}
     
    		public void keyTyped(KeyEvent arg0) {
    		}
    	}

    Pour que cela fonctionne, si j'ai bien compris, il faut que j'ajoute un 'addKeyListener' dans la classe qui écoute mais le soucis c'est qu'écrire : 'this.addKeyListener' ne marche pas.

    Je suis un peu perdue et je ne vois que des exemples avec des jTextField alors que mon application est bien plus simple.

    Comment faire ?

    Je vous remercie par avance pour votre aide.

    Bonne journée

  2. #2
    Membre averti Avatar de toutgrego
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2013
    Messages
    217
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2013
    Messages : 217
    Points : 350
    Points
    350
    Par défaut
    Tu ne peux pas l'ajouter à la classe, il faut la mettre sur un composant 'focusable' : bouton, panel, textfield...=)
    F*ck it ! Do it !

  3. #3
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2012
    Messages : 59
    Points : 50
    Points
    50
    Par défaut Re:
    C'est ce que j'ai fait en créant un Jtextfield vide et n'étant sur aucun container vu que ma classe n'a aucun rapport avec les frame.

    Mais quand je fais alors l'ajout du keylistener à cet objet, rien du tout ne se passe lorsque j'appuie sur les touches.

    Comment ça se fait ?

  4. #4
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Citation Envoyé par Lyadrielle Voir le message
    C'est ce que j'ai fait en créant un Jtextfield vide et n'étant sur aucun container vu que ma classe n'a aucun rapport avec les frame.
    Dans ce cas, comment pourrait-il être possiblement concerné par les évènements clavier ou souris ?

    L'écoute doit se faire par quelque chose qui a bel et bien un rapport avec les frames.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2012
    Messages : 59
    Points : 50
    Points
    50
    Par défaut Re:
    Mais, ainsi donc je ne peux pas faire de programmes tout bêtes en JAVA, sans utiliser les frame ?

    Je veux juste augmenter ou diminuer une valeur avec des touches du clavier. Je ne comprends pas pourquoi cela semble si compliqué. Surtout que j'utilise des frame autre part et que cette classe là (qui fait les calculs), n'a aucun rapport avec le côté graphique de mon programme.

    Elle paramètre les valeurs puis les manipule quand l'autre classe, liée aux frames, se charge du graphique.

  6. #6
    Membre averti Avatar de toutgrego
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2013
    Messages
    217
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2013
    Messages : 217
    Points : 350
    Points
    350
    Par défaut
    Si tu ne veux pas utiliser de fenêtre graphique, tu peux toujours utiliser la console.

    Un truc tout bête, tu fais un scanner qui prend System.in et si tu reçois un 'p' tu incrémentes, si tu reçois un 'm' tu décrémentes.

    Un test if tout simple te permet de le faire. (Comparaison des String avec equals hein)
    F*ck it ! Do it !

  7. #7
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2012
    Messages : 59
    Points : 50
    Points
    50
    Par défaut Re:
    Le system.in ne m'intéresse pas vraiment.

    Je ne veux pas que le système se bloque en attente d'une valeur. Je voulais plutôt quelque chose comme une interruption dès que l'on tape sur une touche.

    Comment faire ?

  8. #8
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Citation Envoyé par Lyadrielle Voir le message
    Mais, ainsi donc je ne peux pas faire de programmes tout bêtes en JAVA, sans utiliser les frame ?
    Si, du moment que les évènements d'IHM graphiques tels que les appuis de touche ne t'intéressent pas.

    Citation Envoyé par Lyadrielle Voir le message
    Je voulais plutôt quelque chose comme une interruption dès que l'on tape sur une touche. Comment faire ?
    Avec une fenêtre concernée par cet appui de touche.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  9. #9
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2012
    Messages : 59
    Points : 50
    Points
    50
    Par défaut Re:
    Je comprends mais ça ne correspond pas à ce que je veux.

    J'ai une classe qui gère les données et qui les envoie ensuite via sockets à la classe qui gère le graphique et qui se sert de ces données.

    Mettre l'incrémentation/la décrémentation sur le graphique n'a ainsi pas de sens. J'ai l'impression que prendre en compte les touches de cette manière est impossible avec java.

    Ce sont donc deux classes qui n'ont pour lien qu'une socket. J'imagine que ça complique les choses mais je ne voyais pas pourquoi.

    Je vais devoir trouver une autre façon que le clavier pour interagir je crois..

    Merci pour votre aide en tout cas

  10. #10
    Membre averti Avatar de toutgrego
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2013
    Messages
    217
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2013
    Messages : 217
    Points : 350
    Points
    350
    Par défaut
    Pour information, ça incrémente et décrémente quoi ? Il doit y avoir un lien quand même à ton graphique aussi faible soit-il.
    F*ck it ! Do it !

  11. #11
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2012
    Messages : 59
    Points : 50
    Points
    50
    Par défaut Re:
    Je trace en fait une genre de vision en perspective d'un carré.
    Cette vision dépend donc de la place de l'observateur et ici mon observateur est concrétisé par un point avec deux coordonnées.
    J'aimerais faire varier ces coordonnées pour que mon dessin change en même temps sur la fenêtre graphique.

    J'envoie à ma fenêtre graphique les infos nécessaires via sockets et je voulais pouvoir modifier ces valeurs manuellement via le clavier sans avoir à alourdir la classe qui met en place le graphique.

    Au niveau de l'architecture du projet, j'ai été obligée de faire deux classes (une qui dessine l'autre qui traite les données).

    Désolée de ne pas avoir précisé plus en détails mon projet, je ne pensais pas cela nécessaire quant à mon problème de départ.

  12. #12
    Membre averti Avatar de toutgrego
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2013
    Messages
    217
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2013
    Messages : 217
    Points : 350
    Points
    350
    Par défaut
    Tu peux externaliser le contrôleur comme avec le pattern MVC mais je pense que tu ne gagnerais pas beaucoup et ça compliquerait les choses. Pourquoi utilises tu des sockets ? Tu as un serveur dans ton programme?
    F*ck it ! Do it !

  13. #13
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Citation Envoyé par Lyadrielle Voir le message
    Mettre l'incrémentation/la décrémentation sur le graphique n'a ainsi pas de sens.
    En même temps personne n'a dit que c'est la seule solution.

    Il suffit que le graphique dise au moteur qu'il a reçu les commandes "haut" ou "bas". Le moteur sera libre d'en faire ce qu'il veut, comme par exemple incrémenter ou décrémenter des trucs. Je vois pas ce qu'il y a de compliqué à mettre ça dans des sockets si on en a envie.

    Citation Envoyé par Lyadrielle Voir le message
    J'ai l'impression que prendre en compte les touches de cette manière est impossible avec java.
    Impossible n'existe pas en informatique. Mais c'est en effet ridiculement compliqué, parce que ça devrait idéalement être impossible.
    Une réaction aux périphériques d'entrée IHM devrait obligatoirement se justifier par une présence visuelle sur cette IHM.

    (Accessoirement, la vraie raison est certainement que Java se positionne comme indépendant de l'environnement. Or les différents environnements ont des réactions contradictoires sur le sujet. C'est une réalité à laquelle Java ne peut rien.)
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  14. #14
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2012
    Messages : 59
    Points : 50
    Points
    50
    Par défaut Re:
    Il n'y a pas de serveur mais des applications indépendantes les unes des autres.
    Cela peut paraître assez étrange mais c'est ainsi qu'est constitué le projet et j'ai aussi du mal à comprendre pourquoi !

    Je suis d'accord avec ce que vous dites, je vais essayer d'améliorer les envois de données inter-applications je pense.

    Je pensais aussi à mettre un thread qui ne possède qu'une boucle while avec system.in.

    Je vais essayer tout ça.

    Merci pour votre aide dans tous les cas !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème avec KeyListener
    Par mesbec dans le forum Général Java
    Réponses: 6
    Dernier message: 19/07/2013, 16h00
  2. Problème de rapidité avec KeyListener et repaint()
    Par Epiliptik dans le forum Composants
    Réponses: 3
    Dernier message: 14/06/2013, 18h40
  3. Problème avec le type 'Corba::Any_out'
    Par Steven dans le forum CORBA
    Réponses: 2
    Dernier message: 14/07/2002, 18h48
  4. Problème avec la mémoire virtuelle
    Par Anonymous dans le forum CORBA
    Réponses: 13
    Dernier message: 16/04/2002, 16h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo