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

avec Java Discussion :

Appeler une instance à partir d'une autre classe


Sujet :

avec Java

  1. #1
    Membre expérimenté
    Avatar de Anduriel
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Février 2004
    Messages
    2 290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration

    Informations forums :
    Inscription : Février 2004
    Messages : 2 290
    Points : 1 500
    Points
    1 500
    Par défaut Appeler une instance à partir d'une autre classe
    Bonjour,

    Dans mon main() je crée une instance:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ClasseA instanceA = new ClasseA();
    Dans cette classe, je créé un objet de ClasseB hérité de JPanel:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    JPanel objet = new ClasseB();
    Maintenant j'ai une troisième classe, ClasseC, dans laquelle je souhaite faire référence à ce panel. Donc dans une méthode de ClasseC, je fais par ex:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    objet.setBackground(Color.WHITE);
    // ou
    instanceA.objet.setBackground(Color.WHITE);
    Mais il ne reconnait pas objet...
    Je ne sais pas comment (public/private/protected) ni où (en tête de classe, dans une méthode), déclarer mes variables.

    Comment faire?
    Merci

  2. #2
    Modérateur

    Avatar de Robin56
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juin 2009
    Messages
    5 297
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juin 2009
    Messages : 5 297
    Points : 13 670
    Points
    13 670
    Par défaut
    Citation Envoyé par Anduriel Voir le message
    Je ne sais pas comment (public/private/protected) ni où (en tête de classe, dans une méthode), déclarer mes variables.

    Comment faire?
    C'est assez normal si ClasseC n'a pas de notion d'existance de cette ClasseB. Seule ClasseA détient une référence vers cette instance de ClasseB.

    Comment faire ? Eh bien avoir une référence de ClasseA dans ClasseC. Et avoir un getter au sein de la classe A pour accéder à cette instance de ClasseB :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ClasseA a = new ClasseA(); // On imagine que dans son constructeur, on initialise ta ClasseB
    ClasseC c = new ClasseC(a); // On détient ainsi une référence entre ClasseA et ClasseC
    ClasseA instanceAByC = c.getA();
    ClasseB instanceBByA = instanceAByC.getB();

  3. #3
    Membre expérimenté
    Avatar de Anduriel
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Février 2004
    Messages
    2 290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration

    Informations forums :
    Inscription : Février 2004
    Messages : 2 290
    Points : 1 500
    Points
    1 500
    Par défaut
    j'ai pas compris

    Voila ce que j'ai en réalité:

    Dans une méthode de ma classe Initialisation j'ai:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public void actionPerformed(ActionEvent e){ 
     
        // vars
     
        ClasseA instanceA = new ClasseA(var1, var2, var3);
     
    }
    Dans ClasseA j'ai:

    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
    public class ClasseA extends JFrame implements KeyListener {
     
       private JPanel objet;
       private ClasseC instanceC;
     
       public ClasseA(int var1, int var2, String var3) {
          // ...
          objet = new ClasseB();
          instanceC = new ClasseC(instanceA); // d'après ce que tu as dit?
       }
     
       public void keyReleased(KeyEvent e) {
          // ...
          instanceC.bg(couleur);
       }
     
    }
    Et enfin dans classe C:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public class ClasseC extends Instruction {
     
       public void bg(Color couleur) {
          objet.setBackground(Color.WHITE);
       }
     
    }
    Ca peut sembler étonnant l'utilisation des classes dans cet exemple, mais c'est pour illustrer. Moi je souhaite que objet soit reconnu dans la classe C...

  4. #4
    Modérateur

    Avatar de Robin56
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juin 2009
    Messages
    5 297
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juin 2009
    Messages : 5 297
    Points : 13 670
    Points
    13 670
    Par défaut
    Alors en repartant de mon exemple de départ, ça donne l'organisation des classes suivantes :
    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
    public class Lanceur {
      public void static main(String[] args) {
        ClasseA a = new ClasseA(); // On imagine que dans son constructeur, on initialise ta ClasseB
        ClasseC c = new ClasseC(a); // On détient ainsi une référence entre ClasseA et ClasseC
        ClasseA instanceAByC = c.getA();
        ClasseB instanceBByA = instanceAByC.getB();
      }
    }
     
    public class ClasseA {
      private ClasseB b;
      public ClasseA() {
        b = new ClasseB();
      }
      public ClasseB getB() {
        return b;
      }
    }
     
    public ClasseC {
      private ClasseA a;
      public ClasseC(ClasseA a) {
        this.a = a;
      }
      public ClasseA getA() {
        return a;
      }
    }
    Comme il n'y a que ClasseA qui connait ton instance de ClasseB, il faut que ClasseC ait une relation vers l'instance de ClasseA. Je laisse à ta charge l'adaptation de ce code au sein de ton projet

  5. #5
    Membre expérimenté
    Avatar de Anduriel
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Février 2004
    Messages
    2 290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration

    Informations forums :
    Inscription : Février 2004
    Messages : 2 290
    Points : 1 500
    Points
    1 500
    Par défaut
    Après avoir galéré 1h j'ai finalement réussi!

    Merci

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

Discussions similaires

  1. Réponses: 9
    Dernier message: 01/07/2009, 14h56
  2. Créer une instance à partir d'une variable ? Possible ?
    Par jpboogie dans le forum ActionScript 1 & ActionScript 2
    Réponses: 2
    Dernier message: 25/04/2009, 09h47
  3. Réponses: 2
    Dernier message: 05/01/2009, 12h45
  4. creation d'une instance à partir d'une string
    Par menuge dans le forum Général Python
    Réponses: 4
    Dernier message: 22/07/2008, 16h24
  5. Réponses: 5
    Dernier message: 22/05/2008, 14h42

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