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 :

NetBeans problème pour addActionListener()


Sujet :

NetBeans Java

  1. #1
    Membre éclairé
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mars 2002
    Messages
    244
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Mars 2002
    Messages : 244
    Par défaut NetBeans problème pour addActionListener()
    Bonjour,

    Je suis occupé à refaire un tutoriel sur le MVC avec comme exemple une calculatrice.
    Je suis débutant en NetBeans et je ne sais pas si j'ai bien déclaré mon Projet.

    J'ai créé une classe Modèle qui contient mon Main.
    J'ai créé un JForm qui est en fait ma vue.
    J'ai créé un controleur qui est une simple classe.

    Mon problème est que quand je créé ma JForm et que je mets un bouton dessus, je ne sais plus éditer le code. Il se trouve dans la méthode générée par NetBeans.

    Dans cette méthode je vois le code d'initialisation de mon bouton.
    Je voudrais y taper la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    JButon.addListener(controleur);
    Mais je suis bloqué avec NetBeans qui m'empêche de l'éditer.

    Est-ce parce que je ne déclare pas bien mon Projet Java?
    Y a-t-il un moyen pour dire:
    Ca c'est ma vue et je veux que les ActionPerformed d' un boutons soit définis dans ma classe controleur?

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 73
    Par défaut
    Bonsoir L0007,

    Tu veux rajouter une gestion d'évènement a ton bouton, c'est cela ?

    Dans ce cas, avec la souris tu fais un clique droit sur le bouton :
    - Events
    - Action
    - Action Performed.

    A+

  3. #3
    Membre éclairé
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mars 2002
    Messages
    244
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Mars 2002
    Messages : 244
    Par défaut
    C'est un méthode que j'avais déjà.

    Je vais essayer d'être plus clair:
    Si je fais Events-> Action -> ActionPerformed

    J'obtiens le code qui suit dans le init() de ma Form
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    jButton1.addActionListener(formListener);
    C'est ceci que je voudrais pouvoir modifier en :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    jButton1.addActionListener(controleur);
    Ce que netbeans m'empêche de faire.

    Netbeans me met aussi ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    private class FormListener implements java.awt.event.ActionListener {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                if (evt.getSource() == jButton1) {
                    CalculetteVue.this.jButton1ActionPerformed(evt);
                }
            }
        }// </editor-fold>
     
        private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
    // TODO add your handling code here:
        }
    Comme expliquer plus haut je voudrais pouvoir modifier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    jButton1.addActionListener(formListener);
    en :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    jButton1.addActionListener(controleur);
    Dans ma classe controleur, je gérérai les events.
    Voici un extrait de mon controleur:
    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    public class CalculetteControleur   implements  ActionListener
    {
        private CalculetteVue       vue;
        private CalculetteModele    modele;
        
        /**
         * Constructeur de  CalculetteControleur
         */
        public CalculetteControleur(CalculetteVue vue,CalculetteModele modele)
        {
            this.vue=vue;
            this.modele=modele;
        }
    
        public void actionPerformed(ActionEvent e)
        {
            String  s=((JButton) e.getSource()).getText();
            
            if  (s.compareTo("+")==0)  //plus
            {
                if  (vue.entreeValide())
                {
                    modele.setOperation(modele.PLUS, vue.getEntree());
                    vue.efface();
                }
                else
                    vue.erreur("Valeur invalide !");
            }else if (s.compareTo("-")==0)  // -
            {
                if  (vue.entreeValide())
                {
                    modele.setOperation(modele.MOINS,vue.getEntree());
                    vue.efface();
                }
                else
                    vue.erreur("Valeur invalide !");
    //...............................................
    J'espère avoir été plus clair

  4. #4
    Membre expérimenté
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 282
    Par défaut
    Bonjour, je pense qu'il doit être possible de faire mieux/plus simple, mais quand tu cliques sur ton bouton dans l'éditeur visuel, va dans les propriétés, onglet Code, puis clic sur le bouton '...' au niveau de la ligne "Post-Creation", tu peux alors rentrer ton code, du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    jButton1.addActionListener(myListener);
    Celui-ci sera toujours intégré dans le code généré par NetBeans.
    D'ailleurs, au niveau de ton controleur, je te conseil de ne pas regarder le texte de tes boutons, mais plutôt de passer par les set/getActionCommand, ça te permet, si par exemple tu internationalises ton application, de ne pas faire d'erreur.

  5. #5
    Membre éclairé
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mars 2002
    Messages
    244
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Mars 2002
    Messages : 244
    Par défaut
    Ok, c'est ce dont j'avais besoin.

    Encore une dernière question, quand tu dis:
    Citation Envoyé par Napalm51 Voir le message
    Bonjour, je pense qu'il doit être possible de faire mieux/plus simple, mais qua
    D'ailleurs, au niveau de ton controleur, je te conseil de ne pas regarder le texte de tes boutons, mais plutôt de passer par les set/getActionCommand, ça te permet, si par exemple tu internationalises ton application, de ne pas faire d'erreur.
    Si j'utilise le getActionCommand(), il me renvoie le texte du bouton.
    Quand tu parles de l'intertionalisation, je comprends pas très bien...
    Si je décide mettre le texte des boutons en anglais, je dois qd même aller changer dans le code non?
    on parle ici de faire un test dans le controleur style:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    String  s=(e.getActionCommand());
    if (s=="Ajouter")
    then...
    if (s=="Effacer") then...
    C'est bien ça?

    N'existe-t-il pas un moyen d'obtenir le nom du bouton et pas son texte?
    De manière à devoir juste cahnger le texte du bouton mais ne rien changer dans le controleur?

  6. #6
    Membre expérimenté
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 282
    Par défaut
    En effet, cela te renvoi le texte du bouton, à moins de définir, lors de sa création, l'ActionCommand via setActionCommand(String AC);

    Tu ajoutes donc dans "Post-creation" la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    monBouton.setActionCommand("action_du_bouton");
    et dans ton contrôleur tu control l'ActionCommand. peut importe le texte du bouton, l'actioncommand sera la même donc pas de soucis.


    Il est possible d'utiliser getSource() sur ton évènement mais il te sera difficile de faire quelque chose comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (e.getSource() == monBouton) ...
    dans ton contrôleur, n'ayant pas de référence vers tes composants ...
    (oui, getSource() retourne la référence de l'objet qui à lancé l'évènement)

    EDIT :
    ATTENTION, j'ai vu
    NON, comparaison de String >> méthodes equals ou equalsIgnoreCase !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if("Ajouter".equals(s))
    L'écriture "ma_chaine".equals(une_string)" est préférable à "une_string.equals("ma_chaine")" pour éviter les NullPointerException

  7. #7
    Membre éclairé
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mars 2002
    Messages
    244
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Mars 2002
    Messages : 244
    Par défaut
    Merci pour tout!

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 22
    Par défaut
    Salut,

    J'avais le même problème et les réponses apportées ici mon beaucoup aidé.

    Par contre, par souci d'optimisation, j'ai deux .addActionListener qui sont appelés. Un personnalisé que j'appelle en Post-Creation et l'autre par défaut. Est-il possible de ne pas l'appeler la deuxième fois?

    Merci

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

Discussions similaires

  1. Module NetBeans en java : problème pour action avec un fichier .xml
    Par sebas64480 dans le forum NetBeans Platform
    Réponses: 0
    Dernier message: 23/04/2012, 16h44
  2. Réponses: 0
    Dernier message: 07/06/2010, 15h47
  3. [Swing/Netbeans] Problème pour organiser l'interface
    Par ggvert dans le forum Débuter
    Réponses: 2
    Dernier message: 27/05/2010, 23h29
  4. Réponses: 2
    Dernier message: 14/12/2007, 10h43
  5. Réponses: 1
    Dernier message: 07/06/2006, 18h56

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