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 et les objets


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 147
    Par défaut KeyListener et les objets
    Bonjour à tous.

    J'ai une incompréhension concernant les keyListener et j'aimerais si possible que vous puissiez m'éclairer un peu plus sur le sujet.

    Je vous explique un peu comment est structuré mon (micro)programme.

    J'ai un JPanel unique stocké dans un JFrame.

    J'ai un menu dans une classe et à partir du moment où j'affiche ce menu, je souhaite pouvoir écouter le clavier.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    class Lancement extends JPanel implements KeyListener
    -> contient le main

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    class Menu extends Lancement implements KeyListener
    -> Classe où je dois pouvoir récupérer les événements clavier.

    Dans le constructeur de Lancement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    panelEcran.setFocusable(true);
    panelEcran.addKeyListener(this);
    Dans le constructeur de menu:
    Cette classe affiche une image et des labels tous intégrés à mon JPanel nommé panelEcran. panelEcran est déclaré dans Lancement et est hérité.

    Lorsque je lance le programme, dans la console, apparait aussi bien les évènements de Lancement que de Menu. Dès l'instant que je retire le focus, je ne capture plus rien. Logique. Si je remets le focus sur le panel, je capture à nouveau. Par contre, si je remets le focus sur mon objet Menu, ca ne marche pas et faire un setFocusable(true) sur l'objet Menu ne fonctionne pas non plus, ce qui me semble logique aussi.

    Si je retire les 2 lignes du constructeurs de Lancement, et que je relance le programme, je ne capture plus rien.

    Bref, je suis un peu perdu et j'y vais à taton depuis quelques heures. Si vous pourriez m'éclairer un peu.

    Merci beaucoup.

  2. #2
    Membre Expert
    Avatar de gifffftane
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 354
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 2 354
    Par défaut
    J'ai l'impression que cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    class Menu extends Lancement implements KeyListener
    ... ne peut que mettre le bordel.

    Essaie plutot de partir sur cette base là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    class Menu implements KeyListener
    En effet, à partir du moment où une classe hérite d'une autre, la création de la fille exécute automatiquement les constructeurs de la mère et de la fille. Donc ici, le constructeur de Lancement sera exécuté deux fois (au moins) et rien qu'à imaginer ce que cela peut donner, j'ai mal à la tête.

    Pour la suite, puisque ton programme est déjà petit, essaie de le rendre encore plus petit, et envoie-le nous, qu'on puisse directement le compiler et l'exécuter (même s'il y a des erreurs d'exécution, du moment qu'il est compilable, c'est bon), cela nous facilitera la tâche pour t'aider.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 147
    Par défaut
    Bonjour et merci de ta réponse.

    Mon programme n'est pas si petit que ça. Il doit faire dans les 2 000 lignes.

    Par contre, la plupart de mes classes héritent de la classe Lancement où sont déclarés tous les objets que je partage entre les classes. Exemple: mon JPanel déclaré dans Lancemene.

    Hériter de Lancement ne pose théoriquement pas de problème car le constructeur de cette classe est vide.

    J'aurais aimé pouvoir mettre le Listener dans le constructeur de Menu et que cela soit suffisant (en implémentant les méthodes qui vont avec évidemment).

  4. #4
    Membre Expert
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    1 348
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 348
    Par défaut
    En héritant de Lancement tu n'hérites pas des objets attributs de lancement, mais des attributs tout court !!!
    Attention à la notion d'héritage ! L'héritage se fait entre classes et non entre objets !!! A mon avis c'est pas très clair dans ta tête !

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 147
    Par défaut
    Si j'hérite d'une classe et qu'un objet est instancié de la manière suivante dans celle-ci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    protected static ClasseBidon bidon = new ClasseBidon();
    Alors j'ai accès à l'objet. C'était de ça dont je voulais parler plus tôt.

    Donc apparemment, vous avez l'air de penser que c'est cette notion d'héritage qui mettrait le bordel.

  6. #6
    Membre Expert
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    1 348
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 348
    Par défaut
    Euh oui là tu y a accès mais c'est étrange de mettre ces objets en static ...

Discussions similaires

  1. Réponses: 16
    Dernier message: 06/06/2007, 12h42
  2. question de débutant sur les objets
    Par boucher_emilie dans le forum ASP
    Réponses: 3
    Dernier message: 06/08/2004, 10h51
  3. Architecture pour les objets d'un jeu
    Par Freakazoid dans le forum DirectX
    Réponses: 7
    Dernier message: 31/07/2004, 13h09
  4. Réponses: 5
    Dernier message: 07/07/2004, 15h13
  5. Rafraichissement de la fiche ainsi que de tous les objets
    Par portu dans le forum Composants VCL
    Réponses: 7
    Dernier message: 06/01/2004, 00h25

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