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 :

Modifier un objet d'une classe A a partir d'une classe B sur un actionPerformed


Sujet :

AWT/Swing Java

  1. #1
    Nouveau Candidat au Club
    Profil pro
    XXX
    Inscrit en
    Mai 2006
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : XXX

    Informations forums :
    Inscription : Mai 2006
    Messages : 4
    Points : 1
    Points
    1
    Par défaut Modifier un objet d'une classe A a partir d'une classe B sur un actionPerformed
    Bonjour,

    J'ai une classe (Gui) ou j'ai créé mon Jbutton (JButton bu = new JButton("")), j'ai ensuite un addActionListener sur ce boutton qui pointe sur une autre classe (MyListener).

    Dans la classe (MyListener) , j'ai une methode actionPerformed(ActionEvent e) dans laquelle je souhaite faire un refresh de mon boutton bu ( par ex: son label).

    Mais dans la classe (MyListener) si je fait bu.setText("TITI") , cela 'bloque' car l'objet bu n'est pas connu dans ma classe MyListener.

    Merci pour votre aide.

  2. #2
    Membre expérimenté Avatar de herve91
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 282
    Points : 1 608
    Points
    1 608
    Par défaut
    Tu peux par exemple passer la référence de ton JButton lors de l'instanciation de la classe MyListener :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    JButton bu = new JButton("");
    bu.addActionListener(new MyListener(bu));
    ...
    class MyListener implement ActionListener {
      JButton bu;
     
      public MyListener(JButton bu) {
        this.bu = bu;
      }
      ...
    }

  3. #3
    Nouveau Candidat au Club
    Profil pro
    XXX
    Inscrit en
    Mai 2006
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : XXX

    Informations forums :
    Inscription : Mai 2006
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Merci herve91 ,

    j'ai pensé a cela, mais cela implique de faire un MyListener pour chaque element que je souhaite 'modifié' . Je pensais plutot a passer a ma methode MyListener un Jpanel ou voir le JFrame de mon appli avec l'ensemble de mes objets et ensuite il ne me reste plus qu'a faire:

    bu.setText("toto"); label_x.setText("titi) etc ...

    Bref, de passer a MyListener l'ensemble de mes objets et surtout un moyen d'y faire reference ensuite !?

    Merci.

  4. #4
    Membre expérimenté Avatar de herve91
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 282
    Points : 1 608
    Points
    1 608
    Par défaut
    Dans ce cas, passe au constructeur de MyListener un tableau ou une collection de Component.

  5. #5
    Nouveau Candidat au Club
    Profil pro
    XXX
    Inscrit en
    Mai 2006
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : XXX

    Informations forums :
    Inscription : Mai 2006
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    donc pour faire 'simple' il faut avoir les actionPerformed DANS la classe ou les composants graphique sont crées. !?

    Je suppose qu'il y a un moyen 'simple' de passer a ma classe MyListener mon JFrame principal et ensuite ma classe MyListener est capable de faire .

    bu.setText("titi); afin de changer le texte du boutton 1 créé dans ma classe Gui.

    Utiliser la methode Component[] co = jpanel.getComponents() me permet d'avoir mes objets mais ensuite il faut parcourir co pour récupérer mon objets , cela est compliqué.

    Merci pour vos reponses.

  6. #6
    Membre expérimenté Avatar de herve91
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 282
    Points : 1 608
    Points
    1 608
    Par défaut
    Citation Envoyé par reginux
    donc pour faire 'simple' il faut avoir les actionPerformed DANS la classe ou les composants graphique sont crées. !?
    En effet, c'est plus simple, moi j'écris le code des listeners dans des classes anonymes. Eventuellement, tu peux déporter le code des méthodes actionPerformed dans des classes dédiées aux traitements.

    Citation Envoyé par reginux
    Je suppose qu'il y a un moyen 'simple' de passer a ma classe MyListener mon JFrame principal et ensuite ma classe MyListener est capable de faire .

    bu.setText("titi); afin de changer le texte du boutton 1 créé dans ma classe Gui.
    Utiliser la methode Component[] co = jpanel.getComponents() me permet d'avoir mes objets mais ensuite il faut parcourir co pour récupérer mon objets , cela est compliqué.
    Oui, bien sûr que c'est possible mais justement, comment retrouver la référence du bouton ? Plutôt que de passer le JFrame principal, tu peux passer un objet qui fournit les références des composants :
    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
    class MyListener implements ActionListener {
      interface ComponentProvider {
        Component getBu();
        Component getLabelX();
      }
     
      ComponentProvider cp;
     
      public MyListener(ComponentProvider cp) {
        this.cp = cp;
      }
     
      public void actionPerformed(ActionEvent ev) {
        cp.getBu().setText("titi");
      }
    }
     
    public class Gui implements ComponentProvider {
      JButton bu;
      JLabel labelX;
     
      ...
      new MyListener(this);
      ...
     
      public Component getBu() {
        return bu;
      }
     
      public Component getLabelX() {
        return labelX;
      }
    }

  7. #7
    Nouveau Candidat au Club
    Profil pro
    XXX
    Inscrit en
    Mai 2006
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : XXX

    Informations forums :
    Inscription : Mai 2006
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Merci beaucoup herve91 pour tes réponses.

    Reginux

Discussions similaires

  1. Réponses: 3
    Dernier message: 14/08/2012, 10h24
  2. Réponses: 2
    Dernier message: 21/03/2012, 10h21
  3. Réponses: 10
    Dernier message: 22/08/2010, 13h35
  4. Réponses: 1
    Dernier message: 29/04/2009, 22h39
  5. Réponses: 1
    Dernier message: 29/10/2006, 05h04

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