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

Java Discussion :

Problème de communication entre classe


Sujet :

Java

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    433
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 433
    Points : 240
    Points
    240
    Par défaut Problème de communication entre classe
    Bonjour, voila mon problème:

    J'ai une classe Fenetre, et une classe dérivée FenetreMultiEcran.
    Une fenetre multi écran contient un tableau de Ecran.

    La classe Ecran contient une référence vers la FenetreMultiEcran qui le contient.

    Les écrans sont tous des dérivés de Ecran.
    Pour résumer en gros:

    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 MaFenetre extends FenetreMultiEcran {
     
    	private Ecran mesEcrans[];
     
    	// J'ai deux ressources à partager entre les écrans
    	public final int MA_RESSOURCE_PARTAGEE1 = 5;
    	public final Rectangle MA_RESSOURCE_PARTAGEE2 = new Rectangle(1,2,3,4);
     
    	public MaFenetre() {
     
    		mesEcrans = new mesEcrans[2];
    		mesEcrans[0] = new MonEcran1(this); // this est conservé dans MonEcran1()
    		mesEcrans[1] = new MonEcran2(this); // MonEcran1 et MonEcran2 dérivent de Ecran
     
    	}
     
    }
    Le problème est que à l'intérieur de mes ecrans MonEcran1 et MonEcran2, je voudrais avoir accès à des variables publiques de MaFenetre. Le soucis, c'est que quand je garde la référence avec "this", il s'agit d'une classe FenetreMultiEcran et pas MaFenetre (et donc les variables que je met n'appartiennent pas à la classe...).

    Je suis assez bloqué, merci de votre aide !

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Août 2006
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2006
    Messages : 80
    Points : 75
    Points
    75
    Par défaut
    Bonjour,

    Si j'ai bien compris, la réference reçue dans le constructeur de MonEcranx n'est pas la bonne. Tu reçois une réference FenetreMultiEcran.

    Si il s'agit de ça, tu peux soit changer le type du paramètre du constructeur de MonEcran1 et 2.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    public MonEcran(MaFenetre fenetre){
    ....
    }
    ou encore cast la référence reçue en MaFenetre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    public MonEcran(FenetreMultiEcran fenetre){
            MaFenetre f = (MaFenetre)fenetre;
    }
    Voila, j'espère qu'il s'agissait de ton problème...

    Salut

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    433
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 433
    Points : 240
    Points
    240
    Par défaut
    Je croie que tu m'as amené la solution.

    Dans la classe Ecran de base j'ai une référence "parent" de type FenetreMutliEcran.

    Dans ma classe dérivée MonEcran je vais déclarer une référence "parent" de type MaFenetre.

    Comme ça à l'intérieur de la classe MonEcran si j'appelle "parent" c'est le type MaFenetre qui prendra le dessus, et j'aurais toujours accès à l'autre avec super.parent

    Je vais tester ça ^^
    Merci pour le coup de pouce !


    EDIT: Ca fonctionne. Désolé pour le topic semi-inutile ^^'

  4. #4
    Membre habitué Avatar de fomazou
    Inscrit en
    Mars 2004
    Messages
    220
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 220
    Points : 151
    Points
    151
    Par défaut
    je n'arrive pas à cerner ce que tu veux.
    J'ai une classe Fenetre, et une classe dérivée FenetreMultiEcran.
    dans le code je voie une classe MaFenetre et non fénêtre. l'erreur est humain supposons que MaFenetre est en fait la class Fenetre. préoccupation suivante FenetreMultiEcran dérive de qui? si FenetreMultiEcran dérive de Fenetre c'est plutôt comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public class  FenetreMultiEcran extends Fenetre
    ce que toi tu a écrit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public class Fenetre extends FenetreMultiEcran
    veut dire que la class Fenetre derrive(Etend, Spécialise, enrichit) la class FenetreMultiEcran. doc que Fenetre a toute les propriétés et méthodes de la classe FenetreMultiEcran et en plus d'autres qui la particularise (c'est ça le principe de l'héritage)

    La suite : tout ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     
    	private Ecran mesEcrans[];
     
    	// J'ai deux ressources à partager entre les écrans
    	public final int MA_RESSOURCE_PARTAGEE1 = 5;
    	public final Rectangle MA_RESSOURCE_PARTAGEE2 = new Rectangle(1,2,3,4);
     
    	public MaFenetre() {
     
    		mesEcrans = new mesEcrans[2];
    		mesEcrans[0] = new MonEcran1(this); // this est conservé dans MonEcran1()
    		mesEcrans[1] = new MonEcran2(this); // MonEcran1 et MonEcran2 dérivent de Ecran
    appartiennent à l'objet MaFenetre je veux dire Fenetre, même
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    private Ecran mesEcrans[];
    ton fameu tableau d'écran.
    je te suggèrre de revoir encore la conception de tes classes!
    "le temps c'est le meilleur des médécins, peut être aussi le meilleur des assassins" Bernis-Francine

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    433
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 433
    Points : 240
    Points
    240
    Par défaut
    Nan MaFenetre et Fenetre sont bien différents.
    On a: Fenetre => FenetreMultiEcran => MaFenetre

    Après pour les écrans on a:
    Ecran => MonEcran

    A savoir que dans écran on a la variable "parent" qui est du type "FenetreMultiEcran":
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public class Ecran {
     
    FenetreMultiEcran parent = null;
     
    public Ecran(FenetreMultiEcran parent) {
    this.parent = parent;
    }
    }
    La problématique: accèder aux variables publiques de MaFenetre depuis MonEcran étant donné que la référence est de type "FenetreMultiEcran" et non pas "MaFenetre".

    Du coup, dans MonEcran avant modification j'avais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public class MonEcran extends Ecran {
     
    public MonEcran(FenetreMultiEcran parent) {
       super(parent);
    }
    }
    L'appel de "parent.variablePublique" était donc interdit car "variablePublique" n'existe pas dans FenetreMultiEcran (mais dans MaFenetre).

    Pour palier au problème j'ai donc rédéfinit le constructeur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public class MonEcran extends Ecran {
     
    MaFenetre parent = null;
     
    public MonEcran(MaFenetre parent) {
       super(parent);
    }
    }
    Maintenant l'appel de "parent.variablePublique" est autorisé !

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

Discussions similaires

  1. Problème de communication entre 2 class
    Par sancho.poncho dans le forum Général Python
    Réponses: 6
    Dernier message: 15/05/2013, 21h10
  2. problème de communication entre mes classes
    Par emiliekun dans le forum ActionScript 3
    Réponses: 13
    Dernier message: 19/08/2009, 14h10
  3. [c#] probléme de communication entre classe
    Par OpenGG dans le forum C#
    Réponses: 1
    Dernier message: 24/09/2006, 21h54
  4. Problème de communication entre C# et ASP
    Par Prowlx dans le forum ASP
    Réponses: 1
    Dernier message: 19/07/2006, 17h37
  5. Problème de communications entre threads
    Par maya09 dans le forum Windows
    Réponses: 1
    Dernier message: 22/02/2006, 22h18

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