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

Langage Java Discussion :

Utilisation de variables dans des classes différentes


Sujet :

Langage Java

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 22
    Points : 18
    Points
    18
    Par défaut Utilisation de variables dans des classes différentes
    Bonjour,

    J'ai un petit problème de codage, car je n'arrive pas à utiliser des variables (larg et haut) dans deux classes différentes.Pourtant en créant lles varibles je les ai défini comme "Public".

    Voici un bout de code:

    public class phasedejeu extends JFrame{

    JPanelDessin2 jPanel5 = new JPanelDessin2();

    Dimension dim = jPanel5.getSize() ;
    public int larg = dim.width ;
    public int haut = dim.height;
    }

    public class JPanelDessin2 extends JPanel {
    public int haut;
    public int larg;

    int x=larg*200; int y=haut*200;
    Image tete2,fourmiliere,texture;

    public void paintComponent (Graphics g) {
    g.drawImage(tete2,200,50,x,y, this);
    }
    }

    Merci d'avance de votre aide.

  2. #2
    Membre chevronné
    Avatar de afrikha
    Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    1 600
    Détails du profil
    Informations personnelles :
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2005
    Messages : 1 600
    Points : 2 208
    Points
    2 208
    Par défaut
    Bonjour et bienvenue sur les forums de developpez.com

    Comment accédes-tu à tes varaibles ? il faut normalement que ça soit depuis une instance de ta classe car se sont des variables d'instance. Un exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    phasedejeu jeu=new phasedejeu();
    int largeur=jeu.larg
    Cependant j'ai quelques remarques :
    • Les noms de classes commencent topujours par une majuscule. Voir les conventions de codage en Java.
    • En déclarant tes variables d'instance public tu violes le principe d'encapsulation. Il faut utiliser des getters et des setters.


    ton code devrait donc être :
    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
     
    public class PhaseDeJeu extends JFrame{
     
    JPanelDessin2 jPanel5 = new JPanelDessin2();
     
    private Dimension dim = jPanel5.getSize() ;
    private int larg = dim.width ;
    private int haut = dim.height;
     
    public int getLarg(){
      return larg;
    }
     
    public void setLarg(int x){
           larg=x;
    }
     
    public int getHaut(){
          return haut;
    }
     
    public void setHaut(int y){
           haut=y;
    }
    }
    Et pareil pour l'autre classe...

    Voilà, si tu as d'autres questions n'hésite pas à les poser

    @+

    P.S : Utilise les balises code (#) , c'est plus lisible avec

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 22
    Points : 18
    Points
    18
    Par défaut
    Merci de ta réponse expresse, mais je vais t'embêter une fois de plus car lorsque j'essaye de lancer le programme il me met un message d'erreur:

    java.lang.StackOverflowError
    Exception in thread "main"

    Donc je sais pas trop quoi faire!!

    Voila un bout de 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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
     
     
    public class Phasedejeu extends JFrame{
     
    JPanelDessin2 jPanel5 = new JPanelDessin2();
     
     
      private Dimension dim = jPanel5.getSize() ;
      public int larg = dim.width ;
      public int haut = dim.height;
     
      public int getLarg(){
        return larg;
      }
     
      public void setLarg(int x){
             larg=x;
      }
     
      public int getHaut(){
            return haut;
      }
     
      public void setHaut(int y){
             haut=y;
      }
     }
     
     public class JPanelDessin2 extends JPanel {
     
            Phasedejeu jeu=new Phasedejeu();
            public int largeur = jeu.larg;
            public int hauteur = jeu.haut;  
            int x=largeur*200; int y=hauteur*200;
     
         public void paintComponent (Graphics g) {
     
                   super.paintComponent(g);
                   this.setBackground(Color.white);
     
     
                           g.drawImage(texture,0,0,1350,758,this);
                           g.drawImage(tete2,200,50,x,y, this);
                           g.drawImage(fourmiliere,50,100,100,100,this);
         }
    }
    Merci d'avance.

  4. #4
    Membre chevronné
    Avatar de afrikha
    Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    1 600
    Détails du profil
    Informations personnelles :
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2005
    Messages : 1 600
    Points : 2 208
    Points
    2 208
    Par défaut
    Tu obtiens une java.lang.StackOverflowError car tu appelles JPanelDessin2 dans PhaseDeJeu et réciproquement, donc ça ne peut pas marcher !
    Une solution serait de passer une instance de PhaseDeJeu à ton JPanel via le constructeur de ce dernier.
    Un peu comme ça :
    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    public class Phasedejeu extends JFrame{
     
      private JPanelDessin2 jPanel5 = new JPanelDessin2(this);
     
     
      private Dimension dim = jPanel5.getSize() ;
      private int larg = dim.width ;
      private int haut = dim.height;
     
      public int getLarg(){
        return larg;
      }
     
      public void setLarg(int x){
             larg=x;
      }
     
      public int getHaut(){
            return haut;
      }
     
      public void setHaut(int y){
             haut=y;
      }
     }
     
    class JPanelDessin2 extends JPanel {
             
            private PhaseDeJeu jeu;         
            private int largeur;
            private int hauteur;
    
            public JPanelDessin2(PhaseDeJeu paramJeu){
                    this.jeu=paramJeu;
                    this.largeur = jeu.getLarg();
                    this.hauteur = jeu.getHaut();
                    
            }
              
            
     
         public void paintComponent (Graphics g) {
     
                   super.paintComponent(g);
                   this.setBackground(Color.white);
                   int x=largeur*200; int y=hauteur*200;
     
                           g.drawImage(texture,0,0,1350,758,this);
                           g.drawImage(tete2,200,50,x,y, this);
                           g.drawImage(fourmiliere,50,100,100,100,this);
         }
    }
    Une remarque : tu ne peux avoir qu'au plus qu'une seule classe déclarée public par fichier source.

    Une autre remarque : il mesemble que tu dois revoir la notion de constructeur et j'ai aussi l'impression que tu n'as pas bien compris l'encapsulation ( je vois encore des jeu.larg ,... )

    @+

    P.S : j'ai mis les corrections dans ton code en rouge, essaye de bien les comprendre et si tu n'y arrives pas ( après avoir essayer ) n'hésite pas à poser des questions

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 22
    Points : 18
    Points
    18
    Par défaut
    Merci pour la réponse.

    J'ai compris à peu près ce que tu as fait, mais pourrais-tu préciser la signification et le rôle de "paramJeu".

    "largeur" et "hauteur" correspondent bien à la dimension de mon JPanel5?

    Sinon je n'ai plus de message d'erreur, mais mon image ne s'affiche pas dans le JPanel.


    PS:Excuse moi pour ces questions aussi bêtes, j'essaie d'avancer comme je peux.

  6. #6
    Membre chevronné
    Avatar de afrikha
    Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    1 600
    Détails du profil
    Informations personnelles :
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2005
    Messages : 1 600
    Points : 2 208
    Points
    2 208
    Par défaut
    Là je n'ai plus le choix, je te renvoie donc à la page de cours Java de developpez.com où tu trouveras certainement de quoi avancer.
    J'en suis désolé mais les questions que tu poses sont des questions de base sur la programmation orientée objet et sur Java.
    Crois-moi, tu avançeras plus vite en lisant un bon cours qu'en demandant de l'aide par ci par là sur des choses relativement simples.
    Voilà, j'espère que tu ne vas mal le prendre mais c'est à mon sens la meilleur reponse que je puisse te fournir
    Je te souhaite bon courage
    @+

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 22
    Points : 18
    Points
    18
    Par défaut
    pas de soucis.
    Merci pour toutes ces infos

    @+

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

Discussions similaires

  1. [2012] Utiliser une variable dans un WHERE différent
    Par CrasherSEP dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 11/07/2013, 15h27
  2. [XL-2007] utilisation de variable dans 2 macros différentes
    Par grostathar dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 06/07/2012, 17h23
  3. récupération attribut dans des classes différentes
    Par l'unique dans le forum Débuter
    Réponses: 4
    Dernier message: 14/10/2010, 10h06
  4. Réponses: 5
    Dernier message: 06/03/2010, 14h47
  5. Utilisation de variables dans plusieurs classes
    Par dedeloux dans le forum Langage
    Réponses: 3
    Dernier message: 20/07/2005, 17h25

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