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 :

Problème de listener


Sujet :

NetBeans Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2010
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 17
    Points : 16
    Points
    16
    Par défaut Problème de listener
    Bonjour,
    je débute avec SWING et donc la réalisation d'interfaces graphiques.

    J'ai fais un exemple simple: lorsque l'on clique sur le bouton, cela vient ajouter 1 au compteur et afficher ce compteur. J'ai une fonction main qui instancie tout simplement une MaFenetre.
    Pour cela j'ai procédé comme ci dessous:

    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
     
    public class MaFenetre extends JFrame{
        public MaFenetre () // constructeur
            {
            setTitle ("Gestion de clics") ;
            Toolkit tk = Toolkit.getDefaultToolkit() ;
            Dimension dimEcran = tk.getScreenSize() ;
            int larg = dimEcran.width ;
            int haut = dimEcran.height ;
            setSize (larg/2, haut/2) ;
     
            Container contenu = getContentPane() ;
            contenu.setLayout(new FlowLayout()) ;
     
            bouton = new JButton ("COMPTEUR") ;
            EcouterLabel ecoutelabel1 = new EcouterLabel(nbClics) ;
            bouton.addActionListener(ecoutelabel1);
            contenu.add(bouton) ;
     
            nbClics = 0 ;
            compte = new JLabel ("nombre de clics sur COMPTEUR = "+ nbClics) ;
            contenu.add(compte) ;
            }
     
        public int nbClics;
        public JTextField saisie, copie;
        private JLabel compte;
        private JButton bouton;
    }
    Il y a donc un listener sur le bouton "COMPTEUR"

    J'ai décidé de faire un listener dans un fichier séparé, j'ai donc créé une classe EcouterLabel dont voici le code
    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
     
    public class EcouterLabel implements ActionListener{
     
        private int n;
        public EcouterLabel(int n)
            {
             this.n = n;
            }
     
        public void actionPerformed (ActionEvent ev)
            {
             n=n+1;
             System.out.println (ev.getActionCommand()+" "+n) ;
            }
    }
    Jusque là tout va bien. "n" s'incrémente bien et s'affiche sur la console, mais comment faire pour pouvoir donner la valeur au label "compte"
    ev.getActionCommand() donne le nom de l'objet cliqué, mais comment modifier sa valeur dans la classe EcouterLabel ?
    car la méthode setText() ne peut pas s'appliquer...

    Ca doit etre assez trivial, merci pour vos réponses.

    Bonne soirée

  2. #2
    Membre éprouvé Avatar de fraco
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    750
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2006
    Messages : 750
    Points : 934
    Points
    934
    Par défaut
    Salut !

    A tout hasard... (je n'ai pas java sous les yeux)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    EcouterLabel ecoutelabel1 = new EcouterLabel(nbClics, compte) ;
    et

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    private int n;
        private JButton compte;
        public EcouterLabel(int n, JButton compte)
            {
             this.n = n;
             this.compte = compte;
            }
    ...un truc dans ce genre ?

  3. #3
    Membre chevronné
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    940
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 940
    Points : 1 817
    Points
    1 817
    Par défaut
    Tout d'abord, donner à MaFenetre une méthode pour qu'on puisse y écrire une nouvelle valeur de nbClics :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public void setNbClics(int nbClics) {
        this.nbClics = nbClics;
        compte.setText("nombre de clics sur COMPTEUR = " + nbClics);
    }
    Dans le listener, ajouter une référence à la fenêtre qui lui permette d'appeller setNbClics :

    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
    public class EcouterLabel implements ActionListener{
     
        private int n;
        MaFenetre maFenetre;
     
        public EcouterLabel(int n, MaFenetre maFenetre)
            {
             this.n = n;
             this.maFenetre = maFenetre;
            }
     
        public void actionPerformed (ActionEvent ev)
            {
             n=n+1;
             maFenetre.setNbClics(n);
             System.out.println (ev.getActionCommand()+" "+n) ;
            }
    }
    Notes : - quand vous écrivez une classe, mettez dabord les attributs et ensuite les méthodes, c'est l'habitude de la plupart des développeurs qui trouveront ainsi votre code plus lisible.
    - si une fenetre / boite de dialogue / etc... a un champ qui peut varier, c'est 99% du temps une bonne idée de mettre un couple de fonction get<nom du champ> / set<nom du champ> pour lire / écrire la valeur.

Discussions similaires

  1. problème de listener lors du déploiment
    Par b.adonet dans le forum JSF
    Réponses: 4
    Dernier message: 23/04/2008, 16h37
  2. Problème de listener dans un JFormattedTextField
    Par Mischka dans le forum Composants
    Réponses: 1
    Dernier message: 11/03/2008, 13h01
  3. Réponses: 2
    Dernier message: 26/10/2006, 10h13
  4. Problème avec listener (générer avec VE)
    Par RR instinct dans le forum AWT/Swing
    Réponses: 3
    Dernier message: 04/08/2006, 09h16
  5. problème de listener (oracle 9i)
    Par bouhn dans le forum Oracle
    Réponses: 1
    Dernier message: 23/01/2006, 14h59

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