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

AWT/Swing Java Discussion :

[KeyListener] Non reconnue dans toute la classe


Sujet :

AWT/Swing Java

  1. #1
    Rédacteur
    Avatar de Arnaud F.
    Homme Profil pro
    Développeur COBOL
    Inscrit en
    Août 2005
    Messages
    5 183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur COBOL
    Secteur : Finance

    Informations forums :
    Inscription : Août 2005
    Messages : 5 183
    Points : 8 873
    Points
    8 873
    Par défaut [KeyListener] Non reconnue dans toute la classe
    Bonjour à tous et à toutes,

    voilà mon problème, j'ai ajouter des KeyListener dans mon constructeur pour pouvoir utilisé les fleches du clavier pour déplacer des Cases, enfin bref, je voulais savoir d'ou venait mon problème, car une fois mon TaquinIHM decouper, je peux utiliser les flèches pour pouvoir déplacer les pièces sans aucun problème, le seul "hic" que j'ai c'est qu'une fois que je clic sur le bouton "Melanger" (qui fait partie de l'IHM du Taquin) ces ecouteurs n'existent plus et je n'arrive plus à déplacer mes Cases grace au flèches.

    Ci-dessous l'initialisation de mes ecouteurs:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    class TaquinIHM extends JFrame
    {
    	public TaquinIHM(String titre)
    	{
        	           super(titre); 
                       ...
                       this.addKeyListener(new Al_Case_pressed(this));
    		   this.decouperImage();
            }
            public void decouperImage() { ... }
            public void melanger() { ... }
    }
    Si vous avez besoin de plus de code, faite le moi savoir

    Merci d'avance

  2. #2
    Membre émérite
    Avatar de xavlours
    Inscrit en
    Février 2004
    Messages
    1 832
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 1 832
    Points : 2 410
    Points
    2 410
    Par défaut
    Bonjour,

    Avec les KeyListeners, le problème, c'est le focus. Seul le composant qui a le focus reçoit les KeyEvents. Au début, c'est bon, mais quand tu cliques sur le bouton, c'est le bouton qui reçoit et garde le focus.

    Donc pour toi, 3 solutions (de la moins bonne à la meilleure) :
    - écouter le bouton avec le même KeyListener
    - rendre le focus au bon composant à la fin de actionPerformed
    - utiliser des InputMaps/ActionMaps.

  3. #3
    Rédacteur
    Avatar de Arnaud F.
    Homme Profil pro
    Développeur COBOL
    Inscrit en
    Août 2005
    Messages
    5 183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur COBOL
    Secteur : Finance

    Informations forums :
    Inscription : Août 2005
    Messages : 5 183
    Points : 8 873
    Points
    8 873
    Par défaut
    Merci Xavlours, mais voici une partie mon main:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    	public static void main(String[] args)
    	{
    		JFrame jf=new TaquinIHM("TaquinIHM");
    		jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		jf.pack();
    		jf.setLocationRelativeTo(null);
    		jf.setResizable(false);
    		jf.setVisible(true);
    		jf.setFocusable(true);
    	}
    Faut-il que je redonne malgré tout le focus ?

  4. #4
    Membre émérite
    Avatar de xavlours
    Inscrit en
    Février 2004
    Messages
    1 832
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 1 832
    Points : 2 410
    Points
    2 410
    Par défaut
    Oui, en général, il faut le faire après la création des composants internes (à la fin du constructeur ou après la construction), et à chaque fois que le bouton attrape le focus (le focus est souvent représenté sur les composants par un cadre en pointillés que tu déplaces avec la touche tab. Comme dans les pages web). Seul un composant à la fois peut avoir le focus. Le fait d'être focusable permet juste de le recevoir quand c'est son tour, mais pas de le garder si l'utilisateur appuie sur tab ou active un autre composant.

    Si c'est la JFrame qui a le focus, c'est elle qui reçoit les KeyEvents => tout va bien. Si tu cliques sur le bouton, c'est lui qui prend le focus et reçoit des KeyEvents, et il s'en fout un peu. Si le bouton appelle laJFrame.requestFocus() à la fin du traitement, alors la JFrame reprend le focus, et tout va bien.

    Sinon, il y a les InputMaps, c'est le principe utilisé pour fermer la fenêtre en appuyant sur alt+F4. C'est indépendant du focus et un peu différent à mettre en place, mais (surtout si tu n'as pas de composants texte) ça marche très bien aussi. Et l'utilisateur n'aura pas la surprise de voir son focus se ballader entre le bouton et la fenêtre.

    J'ai l'impression d'avoir dit 3 fois les mêmes choses, mais bon je me usis levé tôt.

  5. #5
    Rédacteur
    Avatar de Arnaud F.
    Homme Profil pro
    Développeur COBOL
    Inscrit en
    Août 2005
    Messages
    5 183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur COBOL
    Secteur : Finance

    Informations forums :
    Inscription : Août 2005
    Messages : 5 183
    Points : 8 873
    Points
    8 873
    Par défaut
    Merci de tout coeur Xavlours en effet, dans ma fonction mélanger, j'ai juste eu besoin de rajouter:
    Pour que mes KeyListener se """réactive"""

    Bref merci de tout coeur et bonne journée

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

Discussions similaires

  1. Classe non reconnue dans un appel à connect()
    Par kevin254kl dans le forum Débuter
    Réponses: 2
    Dernier message: 03/01/2015, 14h27
  2. Réponses: 7
    Dernier message: 11/08/2011, 19h29
  3. Réponses: 7
    Dernier message: 15/05/2009, 23h13
  4. Critère non reconnu dans la fonction DCount
    Par Ps4 dans le forum Access
    Réponses: 7
    Dernier message: 20/06/2005, 09h02
  5. [EJB] [JSP] Méthode EJB non reconnue dans jsp
    Par stago dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 06/07/2004, 09h52

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