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

NetBeans Java Discussion :

Gérer les évenements clavier


Sujet :

NetBeans Java

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    465
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 465
    Points : 241
    Points
    241
    Par défaut Création d'un listener sous netbeans beta 6
    Bonjour à tous,
    Je suis entrain de créer une application sous la béta netbeans 6.0..
    Ma form comporte des boutons qui peuvent être validé par clic de souris ou par appuie de touches du clavier.. ( Une calculette pour faire simple...)

    Pour l'évenement du clic de souris pas de problèmes...
    Par contre je n'arrive pas à implémenter l'appui d'une touche du clavier..

    Lorsque j'effectue un clic droit sur un des boutons de ma form.. et que je prend l'option "event" puis "key typed", netbeans m'implémente bien le code de l'évenement.
    Auquel je rajoute " if keyEvent.keytyped ==0" ainsi qu'un jButton0.docliked pour que le bouton simulel'appuie de la touche..

    Mais au moment de l'exécution de mon application et malgré l'appui de la touche 0 du clavier par exemple.. rien ne se produit...

    Si ce n'est qu'en appuyant sur la touche "enter" il y un bouton différent qui simule un appui et celà bien qu'il n'y ait aucun code que j'ai écrit concernant ce bouton.. ( je suppose qu'il s'agit d'une fonction par défaut attribué à un bouton lors de la création de celui-ci sur la form..)

    Quelqu'un peut t'il m'indiquer comment créer facilement un KeyEvent sous netbeans ?.

    Merci d'avance..

  2. #2
    Membre éprouvé
    Avatar de n!co
    Profil pro
    Inscrit en
    Février 2004
    Messages
    831
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 831
    Points : 936
    Points
    936
    Par défaut
    Bonjour,

    Tu n'implementes pas correctement l'évenement. Faut récupérer un caractère avec la méthode evt.getKeyChar().
    http://java.sun.com/docs/books/tutor...ylistener.html

    n!co

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    465
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 465
    Points : 241
    Points
    241
    Par défaut Gérer les évenements clavier
    Bonjour à tous,
    je suis entrain d'implémenter une mini calculatrice sous netbeans, et j'ai du mal à gérer les évenements du clavier..
    Comme il s'agit d'une calculatrice, l'entrée de l'utilisateur se fera soit par clic de souris, ou frappe au clavier.
    Pour l'évenement du clic de souris ..pas de problèmes..
    Sur mes jbouton de la calculatrice, je crée un events-key-keyTyped, et netbeans m'implémente la méthode..
    Puis je tapes le code suivant ( à titre d'exemple..) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     private void jButtonZeroKeyTyped(java.awt.event.KeyEvent evt) {                                     
        // TODO add your handling code here:
     
     
     
                char c = evt.getKeyChar();
            if (c == 0) {
            jButtonZero.doClick();
     
            }
     
    }
    Or je n'ai aucun résultat lors de l'appuie de la touche zéro.
    ?
    Comment faire ...?

    Merci d'avance..
    a+

  4. #4
    Membre éprouvé
    Avatar de n!co
    Profil pro
    Inscrit en
    Février 2004
    Messages
    831
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 831
    Points : 936
    Points
    936
    Par défaut
    Merci de reprendre vos discussion déjà ouvertes pour continer un sujet sur la même question.

    La fonction getKeyChar() renvoi un char au format unicode !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    ...
    char c = evt.getKeyChar();
    if (c == 0) {
    ...
    ici tu compares le char retouné avec le nombre 0, ce qui n'a pas de sens.
    Compares le alors avec la méthode équals et la valeur unicode du nombre 0.

    n!co

    ps: le forum swing/awt serait surement plus approprié pour poser ta question, ici nous ne sommes pas des spécialistes de swing et de la gestion des évènements !

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    465
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 465
    Points : 241
    Points
    241
    Par défaut
    A la rigueur, même si la comparaison est erronée...je ne comprend pas lorsque je suis en mode débug, ou breakpoint.. pourquoi lors de l'appui d'une touche mon programme ou netbeans ne gère pas cet événement..
    De la même manière, un ide tel delphi, qui lui détecte cet évenement.. (après si le code n'est pas bon ..à moi de rectifier..mais au moins vérifier le déclenchement de l'événement..)

    le forum swing/awt serait surement plus approprié pour poser ta question, ici nous ne sommes pas des spécialistes de swing et de la gestion des évènements !
    J'ai posé la question dans ce forum, pensant que ça relevait plus une question sur le fonctionnement de la gestion des évenements sous netbeans et non dans le cadre java-awt-swing ( bien qu'on puisse en discuter.. )..Je suppose qu'il y a bien des personnes qui doivent utiliser la gestion des évenements sous netbeans..?

    Encore merci pour ta réponse..
    a+

  6. #6
    Membre éprouvé
    Avatar de n!co
    Profil pro
    Inscrit en
    Février 2004
    Messages
    831
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 831
    Points : 936
    Points
    936
    Par défaut
    Citation Envoyé par Telemak
    J'ai posé la question dans ce forum, pensant que ça relevait plus une question sur le fonctionnement de la gestion des évenements sous netbeans et non dans le cadre java-awt-swing ( bien qu'on puisse en discuter.. )..Je suppose qu'il y a bien des personnes qui doivent utiliser la gestion des évenements sous netbeans..?

    Encore merci pour ta réponse..
    a+
    Netbeans te permet de mettre en place des évenements via des formulaires graphiques, mais le code généré reste du code swing qui sera executé de la même facon avec ou sans netbeans. La tu cherches à effectuer une action sur un évenement clavier, donc dans le cadre de l'éxecution de ton programme.

    Visiblement tu sais ajouter un évenement sur un composant, netbeans ne t'apportera pas grand chose de plus. Sortant de ce cadre, je n'ai jamais utilisé les evenements clavier, je ne peux donc t'aider plus que cela, mise a part te fournir la documentation, ce que j'ai déjà fait.

    Si tu fais une recherche sur le forum swing/awt, je te garanti que tu trouveras ta réponse en moins de 10 min

    bon courage

    n!co

  7. #7
    Membre actif
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    465
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 465
    Points : 241
    Points
    241
    Par défaut
    ok, n!co ..merci pour ton aide...

    Mais j'en reste toujours dessus pour l'instant...et je suis entrain de tester ( m'enfin quand j'arrive à me prendre le temps..) la manière dont se fait la gestion des événements sous netbeans...

    J'ai rajouté l'implémentation suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public class FenCalculette extends javax.swing.JFrame implements ActionListener{
    En me disant que la non reconnaissance de l'appui sur une touche proviendrait peut être de la non - implémentation de " L'acionListener"...
    Or netbeans me souligne déjà en rouge cette ligne.. , et en message d'erreur :

    FenCalculette is not abstract and does not override abstract method actionPerformed ( java.awt.event.ActionEvent in java.awt.event.ActionListener
    Or en consultant de la doc à droite et à gauche.. il est souvent indiqué ce rajout " implements ActionListener" après le extends javax.swing.JFrame.
    Et j'ai bien rajouté en import la gestion des events..

    Si netbeans est censé générer du code swing...je ne voits pas en quoi la syntaxe devrait différer ..non .?

    a+

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    35
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Avril 2007
    Messages : 35
    Points : 27
    Points
    27
    Par défaut
    FenCalculette is not abstract and does not override abstract method actionPerformed ( java.awt.event.ActionEvent in java.awt.event.ActionListener
    La je crois qu'il faudrait que tu jettes un oeil sur la définition des interfaces...

    Alors, rapidement :

    - Quand tu utilise netbeans pour faire un evenement (clic droit ajout etc...), netbeans implemente l'evenement de la manière suivante (dans le code bleu généré automatiquement):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    button.addActionListener(new java.awt.event.ActionListener()
              {
                   public void actionPerformed(java.awt.event.ActionEvent evt)
                   {
                        buttonActionPerformed(evt);
                   }
              });
    c'est a dire qu'il créer un action listener, redéfinit la methode actionPerformed et déclenche la fonction buttonActionPerformed(evt)
    il te demande ensuite d'écrire la fonction déclenchée par cet évenement : buttonActionPerformed (et donc t'envoie dans cette fonction dans ton code)

    C'est une des manière d'ajouter des evenements.

    Une autre manière est d'implémenter l'interface ActionListener au niveau de ta classe. L'interface ActionListener sous entends que ta classe implémente la méthode actionPerformed(ActionEvent). Ce que visiblement tu n'as pas fait, d'ou l'erreur :

    FenCalculette is not abstract and does not override abstract method actionPerformed ( java.awt.event.ActionEvent in java.awt.event.ActionListener
    Quand on ecrit : class niania implements une_interface

    hé bien il faut que la classe niania implémente toute les methodes définies dans l'interface (c'est le concept même des interfaces)

  9. #9
    Membre actif
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    465
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 465
    Points : 241
    Points
    241
    Par défaut
    Salut novayl, merci pour ta réponse .. ;

    Ok pour l'implémentation pas de problèmes...
    Déclencheur d'événements par souris par exemple..pas de problèmes..

    Je reprends mon cas :
    Je suis entrain de créer une petite calculette, qui permet la saisie ou l'entrée des chiffres de deux manières.
    Soit par clic de souris sur les boutons des chiffres qui se trouvent sur la form.,ou alors frappe directe au clavier.
    Dans le cas d'une frappe directe au clavier, je souhaites justement simuler cet appuie sur les touches des boutons de la form.

    Après avoir généré un KeyTyped sur la form, mon code est le suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    private void formKeyTyped(java.awt.event.KeyEvent evt) {
        // TODO add your handling code here:
     
          if (evt.getKeyChar() == '0')  { 
              jButtonZero.doClick(); 
          }
     
     
    }
    Netbeans, m'a bien crée l'évenement ( KeyEvent evt...), auquel je place une comparaison.
    Dans mon exemple et pour faire simple, j'ai juste rajouté la touche zéro mais pas les autres pour des raisons de lisibilité...
    Si la condition est remplie, je simule un clic sur mon jbutton zéro par le biais de doClick...

    Lorsque je lance mon application et teste la frappe de la touche zéro, rien ne se produit..
    J'ai même rajouté un jlabel sur la form, et dans le code j'ai placé dans la suite du doClick : jlabel.setText("ok"); pour vérifier si ce n'était pas le doClick qui me crée un problème..

    Mais pareil , rien ne se produit... J'ai l'impression que netbeans ne tient pas du tout compte de cette implémentation d'événement..
    Soit je m'y prends mal ...ou j'ai du mal à comprendre la logique de fonctionnement de cette événement par netbeans.

    a+

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    35
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Avril 2007
    Messages : 35
    Points : 27
    Points
    27
    Par défaut
    Pifou...

    Bon parce que je suis de bonne humeur aujourd'hui, j'ai quand meme fais quelques tests

    Je précise que c'est la première fois que je m'amuse avec les KeyEvent sous netbeans...

    Résultat, premier test, marche pas, 5 minutes de recherche dans la doc, test ok.

    Alors première chose, lire ceci :
    How to Use the SubFocus in java

    Ensuite lire ceci :
    How to write KeyListener

    Donc effectivement, quand on met l'evenement Keytyped directement sur la form de netbeans comme ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    private void formKeyTyped(java.awt.event.KeyEvent evt)
    J'ai pas trouvé comment m'assurer que c'est la frame qui a le focus (j'avoue j'ai pas chercher non plus, puisque des que je dessine quelque chose, c'est dans un JPanel, jamais directement dans la FrameForm...)

    Par contre, si on met un JPanel bien comme il faut dans la frame, puis qu'on y range consciencieusement tout nos petits boutons etc..., ca marche très bien.

    Exemple :

    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
     
    private void jPanel1KeyTyped(java.awt.event.KeyEvent evt)                                 
         {                                     
              System.out.println(evt.getKeyChar());
              jLabel1.setText("press : " + evt.getKeyChar());
     
              if (evt.getKeyChar() == '0')
              {
                   jButton1.doClick();
              }
         }                                
     
         private void jButton1ActionPerformed(java.awt.event.ActionEvent evt)                                         
         {                                             
              jLabel1.setText("Do click");
              this.jPanel1.requestFocusInWindow();
    requestFocusInWindow() après chaque click, pour redonner le focus au jpanel (sinon c'est le bouton qui garde le focus) et a l'initialisation de l'appli (après le initComponents() de netbeans)

    Bon je doute que cela soit la meilleure facon de faire... mais tu sais ou chercher pour faire mieux maintenant.

  11. #11
    Membre actif
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    465
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 465
    Points : 241
    Points
    241
    Par défaut
    Salut,
    oui effectivement c'est déjà mieux...
    J'ai complètement loupé la section sur le requestFocusInWindow...
    A signaler qu'à priori un " requestFocus" suffit..
    A moi maintenant d'améliorer mon code..
    Encore milles merci pour ton aide..

    ps : suit également d'Alsace..

    a+

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

Discussions similaires

  1. comment gérer les évenements clavier ?
    Par nogard dans le forum GTK+ avec C & C++
    Réponses: 2
    Dernier message: 13/06/2011, 17h44
  2. Réponses: 1
    Dernier message: 22/03/2008, 15h52
  3. [SWING] gérer les entrées clavier à un seul endroit
    Par Isher dans le forum AWT/Swing
    Réponses: 7
    Dernier message: 19/07/2006, 10h55
  4. Réponses: 12
    Dernier message: 22/11/2005, 13h17
  5. Réponses: 5
    Dernier message: 25/07/2005, 09h29

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