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

Agents de placement/Fenêtres Java Discussion :

[JFrame] Problème de KeyListener


Sujet :

Agents de placement/Fenêtres Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mai 2005
    Messages
    75
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 75
    Par défaut [JFrame] Problème de KeyListener
    Salut voila j'ai un pti probleme

    j'ai une JFrame avec different panel et dans un de mes panel un bouton 'ok' et je voudrais lorsque le user click dessus cela fasse un dispose();

    j'ai essayer de faire un setMnemonic mais je suis oblige de faire ALT+Entree pour que ca marche alors je me suis dit qu'il fallait un KeyListener mais je n'arrive pas a l'implementer correctement

    voila le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    bouton.addKeyListener(new KeyAdapter(){
             public void KeyPressed(KeyEvent e)   
             {
                if(e.getKeyCode()==KeyEvent.VK_ENTER)
                {
                    dispose();
                }
             }         
            });
    qu'est ce qui ne va pas dans mon code

  2. #2
    Membre confirmé Avatar de lebesnec
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2005
    Messages : 82
    Par défaut
    Salut,

    les KeyListener servent à éxécuter des actions lors de l'appuie sur les touches du clavier
    setMnemonic(...) sert a associer des raccourcis clavier à un bouton, un menu ...

    ce qu'il te faut c'est plutot :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    monBoutton.addActionListener(new java.awt.event.ActionListener() { 
                    public void actionPerformed(java.awt.event.ActionEvent e) {    
                        // mettre ici le code qui doit être exécuté lors de l'appuie sur le bouton
                    }
                });
    Le "actionPerformed(...)" est applelé dès que le bouton est validé, c'est à dire si quelqu'un clique dessus, ou si le bouton est sélectionné et que l'on appuie sur entrée, ou encore si quelqu'un tape le raccourci clavier associé au bouton.

    Voilà !! 8) @+

  3. #3
    Membre confirmé
    Inscrit en
    Mai 2005
    Messages
    75
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 75
    Par défaut
    ok j'ai essayer mais ca marche toujours pas. Il faut que j'ai le focus sur le bouton pour que ca marche et moi je veux pas

    voila ce que j'ai fait dans mon actionPerformed()

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
        public void actionPerformed(ActionEvent e) 
        {
            if (e.getSource() == bouton || e.getID()==KeyEvent.VK_ENTER) 
            {
                dispose();
            }
        }
    Qu'est ce que je fait pas bien??

  4. #4
    Membre émérite
    Profil pro
    Eleveur de cornichons
    Inscrit en
    Juin 2002
    Messages
    1 074
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Eleveur de cornichons
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 074
    Par défaut
    Euh... y'a un truc que je ne capte pas là
    dans un de mes panel un bouton 'ok' et je voudrais lorsque le user click dessus cela fasse un dispose();
    Et après, tu mets du code pour détecter la touche [Entrer].
    Que veux-tu faire exactement ?
    La méthode donné par lebesnec répond en tout cas à ta question initiale (que j'ai citée ci-haut).

    Nas'

  5. #5
    Membre confirmé
    Inscrit en
    Mai 2005
    Messages
    75
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 75
    Par défaut
    ce que je veux faire c'est lorsque ma fenetre apparait à l'ecran,je voudrais appuyer sur le bouton 'Entree' et que cela fasse disparaitre la fenetre.

    en gros je veux faire la meme chose qu'a la souris lorsque je click sur le bouton a savoir un dispoe();

    j'espere que j'ai ete assez clair

  6. #6
    Membre éclairé Avatar de leminipouce
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2004
    Messages
    754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Janvier 2004
    Messages : 754
    Par défaut
    Dans ce cas là, je vois 2 solutions :
    1) Tu fais de ta fenêtre un Listener (implements ActionListener), tu ajoutes ta fenêtre en tant que listener d'elle même (this.addActionListener(this)) et en traitement dans ta méthode implémenté pour l'actionListener (ActionPerformed()) tu compares la source de ton évènement avec l'action "presser la touche entrée" (if (e.getSource() = KeyStroke('Enter')) - celui-là il est surement faux, mais c'est quelque chose qui ressemble), et dans ce cas tu fais ton dispose.
    2) Tu considères ton bouton comme étant l'action par défaut associé à la touche "Entrée". Mais je n'ai pas la moindre idée de la manière dont tu dois t'y prendre pour faire ça si tu choisis cette solution...

    PS: Je suis pas sûr d'avoir été clair, alors n'hésite pas à me redemander.

  7. #7
    Membre chevronné Avatar de billynirvana
    Homme Profil pro
    Architecte technique
    Inscrit en
    Décembre 2004
    Messages
    472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2004
    Messages : 472
    Par défaut
    A ce moment là, à chaque objet où tu veux que le Entrée fasse une action particulère, tu ajoutes:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    XXX.addKeyKistener(this)

    Par exemple, dans ta classe principale, ou dans la classe où il y a ta frame principale:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    this.addKeyKistener(this)

  8. #8
    Membre confirmé
    Inscrit en
    Mai 2005
    Messages
    75
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 75
    Par défaut
    j'ai pas tres bien suivi est ce que tu peux me reexpliquer plz

    voila le code entier correspondant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    panel_button.setLayout(new FlowLayout());                
            panel_button.add(bouton,null);
            panel.add(panel_button);        
            bouton.addActionListener(this);   
            panel_button.setBorder(BorderFactory.createEtchedBorder());
     
    public void actionPerformed(ActionEvent e) 
        {        
            if (e.getSource() == bouton || e.getSource()==  KeyStroke.getKeyStroke("Enter"))
            {
                dispose();            
            }
        }
    j'ai aussi essayer de faire dans mon if un truc comme ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     if (e.getSource() == bouton || e.getSource()==  KeyStroke.getKeyStroke(KeyEvent.VK_ENTER,0))
    {
         dispose();
    }

  9. #9
    Membre confirmé
    Inscrit en
    Mai 2005
    Messages
    75
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 75
    Par défaut
    up

  10. #10
    Membre confirmé
    Inscrit en
    Mai 2005
    Messages
    75
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 75
    Par défaut
    ca y est j'ai enfin trouver la reponse

    pour ceux que ca interesse il faut mettre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    maFrame.getRootPane().setDefaultButton(monBouton)
    PS ca ne marche que dans le cas ou il n'y a qu'un seul bouton

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

Discussions similaires

  1. [JFrame] Problème de disposition des composants
    Par alizee971 dans le forum Agents de placement/Fenêtres
    Réponses: 4
    Dernier message: 25/08/2008, 14h47
  2. Jframe : Problème de "superposition" image de fond / bouton SUITE
    Par NicolasGuyomar dans le forum Agents de placement/Fenêtres
    Réponses: 2
    Dernier message: 18/03/2007, 13h06
  3. Jframe : Problème de "superposition" image de fond / bouton
    Par lottie dans le forum Agents de placement/Fenêtres
    Réponses: 7
    Dernier message: 15/03/2007, 08h35
  4. [JFrame] Problème affichage
    Par goddet dans le forum Agents de placement/Fenêtres
    Réponses: 10
    Dernier message: 21/11/2006, 08h53
  5. Problème de KeyListener
    Par Link3 dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 02/05/2006, 18h21

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