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 :

boutons, MouseListener et iterations


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
    Juin 2007
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juin 2007
    Messages : 104
    Par défaut boutons, MouseListener et iterations
    Bonjour

    J'ai un souci avec une sorte de browser que j'ai créé.

    Je créé un certain nombre de JButton dans une boucle. Je veux pouvoir afficher un texte (different pour chaque bouton) dans un label lorsque je passe sur le bouton en question. Tous les boutons sont ensuite regroupés dans un JPanel.

    Mon probleme est que lorsque je deplace la souris sur l'un des boutons, il me renvoie toujours la valeur relative au dernier bouton, à savoir "4" !!

    Ma question est : comment lier le MouseEntered à chacun de mes boutons ?

    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
     
    private String[] Texte={"OK","CANCEL","MENU","NEXT","BACK"};
    private JPanel Panel=nexwJPanel();
    private int i;
     
    for (i=0;i<4;i++){
     
    	JButton bouton=new JButton(Texte[i]);
    	bouton.addMouseListener(new MyMouseListener());
    	Panel.add(bouton);	
    }
    private class MonMouseListener implements MouseListener{
       public void mouseEntered(MouseEvent arg0) {
           System.out.println(i);
    }

    Merci par avance

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Février 2007
    Messages
    572
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Février 2007
    Messages : 572
    Par défaut
    Tu affiches dans le listener l'attribut i de l'outerclass (qui est la meme pour tous les button). A la fin de la boucle, i vaut 4, tu affiches donc 4 systematiquement.

    Pour resoudre ton probleme :
    - soit tu recuperes le button a partir de l'evenement. A partir du button, tu as les infos specificiques (comme le nom du button).
    - soit tu fais un listener par button (comme tu l'as fait), mais qui a un attribut supplementaire contenant par exemple le texte à afficher.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juin 2007
    Messages : 104
    Par défaut
    En realite, j'ai simplifié le probleme ici puisque je ne sais, a priori, pas combien je peux avoir de boutons et chaque bouton ne contient pas un Texte mais une image ....

    La 1ere solution que tu m'apportes me semble la meilleure mais je ne vois pas comment faire ?

  4. #4
    Membre émérite
    Profil pro
    Inscrit en
    Février 2007
    Messages
    572
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Février 2007
    Messages : 572
    Par défaut
    Ben ...

    Citation Envoyé par javadoc MouseEvent
    public Component getComponent()
    Returns the originator of the event.
    Returns:
    the Component object that originated the event, or null if the object is not a Component.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juin 2007
    Messages : 104
    Par défaut
    Ok merci Sanguko

    Le GetComponent du Mouselistener marche si je donne un nom à mes boutons, du type
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    bouton.setName(String.valueOf(indexBut));
    Il me renvoie bien la valeur du bouton correspondant quand je clique sur le bouton (cf le code 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
     
    private String[] Texte={"OK","CANCEL","MENU","NEXT","BACK"};
    private JPanel Panel=nexwJPanel();
    private int i;
     
    for (i=0;i<4;i++){
     
    	JButton bouton=new JButton(Texte[i]);
            bouton.setName(String.valueOf(indexBut));
    	bouton.addMouseListener(new MyMouseListener());
    	Panel.add(bouton);	
    }
    private class MonMouseListener implements MouseListener{
       public void mouseEntered(MouseEvent arg0) {
           System.out.println(arg0.getComponent().getName());
    }
    Le souci, c'est qu'en voulant trop simplifier mon pb, j'en ai perdu les elements clefs qui composent ma classe.

    En fait, j'ai une liste de fiche (classes qui contiennent un certain nombre de parametres) et c'est l'image de chacune des fiches que je fais apparaitre dans ma boucle (et non le Texte[i] comme je l'avais noté dans ma vesrion simplifiée ).
    Dans ma boucle "for i", si je demande d'afficher l'etat de chaque fiche (dont l'indice correspond au nouveau bouton instancié), c'est OK.
    En revanche, si je lui demande de m'afficher l'etat de la fiche au moment de l'evenement (MouseClicked), maliste.get(index).getetat() me renvoie "null" ...

    Ou est l'erreur ?? (pourtant ma liste est en entree de mon constructeur Visionneuse)



    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
     
    private List<Fiche> maliste;
     
     Visionneuse(List<FicheCD> maliste){
     
    for (int i=0;i<maliste.size();i++){
    PathImage="./IMAGES/"+maliste.get(i).getnomimagette();
    System.out.println(maliste.get(i).getetat()); // sortie de la variable etat --> OK
    JButton bouton=new JButton(new ImageIcon(PathImage));
    bouton.setName(String.valueOf(indexBut));
     
    bouton.addMouseListener(new MonMouseListener());		
    Panel.add(bouton);
     
    }
    }
     
    private class MonMouseListener implements MouseListener{
    		public void mouseClicked(MouseEvent Mevt){
     
                      MonIndexChoix=Mevt.getComponent().getName(); // Valeur OK
    		  System.out.println(maliste.get(MonIndexChoix).getetat()); // VALEUR null !!
    }

  6. #6
    Membre émérite
    Profil pro
    Inscrit en
    Février 2007
    Messages
    572
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Février 2007
    Messages : 572
    Par défaut
    C'est un peu dur de t'aider, parce que le code que tu montres contient pas mal d'erreur de compilation.
    J'imagine que indexBut, c'est i en fait, et que tu reconvertis la String retournée par getName() en int ?

Discussions similaires

  1. Problème d'ecouteur sur un bouton(MouseListener)
    Par titi42 dans le forum AWT/Swing
    Réponses: 8
    Dernier message: 30/09/2009, 17h24
  2. Pop-up d'une dialog box a partir d'un bouton
    Par bobbyjack dans le forum MFC
    Réponses: 21
    Dernier message: 13/09/2005, 15h32
  3. Réponses: 2
    Dernier message: 31/08/2002, 14h00
  4. Bmp pour boutons
    Par Fizgig dans le forum Outils
    Réponses: 5
    Dernier message: 22/08/2002, 10h56
  5. Afficher/Masquer un bouton comme IE 6
    Par benj63 dans le forum C++Builder
    Réponses: 3
    Dernier message: 29/07/2002, 13h12

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