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 :

Quelques questions concernant le tuto Java - TP Calculatrice


Sujet :

avec Java

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Avril 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Avril 2012
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Quelques questions concernant le tuto Java - TP Calculatrice
    Bonjour à tous !

    Je suis nouveau sur ce forum, j'apprends depuis quelques jours le java par le biais du tutoriel java pour les enfants, j'en suis actuellement à l'élaboration de la calculatrice mais j'ai quelques soucis, je vous montre 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
    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
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
     
    import javax.swing.*;
    import java.awt.GridLayout;
    import java.awt.BorderLayout;
    public class Calculatrice {
      // Déclaration de tous les composants de la calculatrice.
      JPanel contenuFenêtre;
      JTextField champAffichage;
      JButton bouton0;
      JButton bouton1;
      JButton bouton2;
      JButton bouton3;
      JButton bouton4;
      JButton bouton5;
      JButton bouton6;
      JButton bouton7;
      JButton bouton8;
      JButton bouton9;
      JButton boutonVirgule;
      JButton boutonEgale;
      JPanel panneauChiffres;
     
      // Le constructeur crée les composants en mémoire
      // et les ajoute au cadre en utilisant une combinaison 
      // de Borderlayout et Gridlayout
      Calculatrice() {
        contenuFenêtre = new JPanel();
     
        // Affecte un gestionnaire de présentation à ce panneau
        BorderLayout dispositionl = new BorderLayout(); 
        contenuFenêtre.setLayout(dispositionl);
     
        // Crée le champ d'affichage et le positionne dans   
        // la zone nord de la fenêtre
        champAffichage = new JTextField(30);
        contenuFenêtre.add("North", champAffichage);
     
        // Crée les boutons en utilisant le constructeur de
        // la classe JButton qui prend en paramètre le libellé 
        // du bouton 
        bouton0 = new JButton("0");
        bouton1 = new JButton("1");
        bouton2 = new JButton("2");
        bouton3 = new JButton("3");
        bouton4 = new JButton("4");
        bouton5 = new JButton("5");
        bouton6 = new JButton("6");
        bouton7 = new JButton("7");
        bouton8 = new JButton("8");
        bouton9 = new JButton("9");
        boutonVirgule = new JButton(",");
        boutonEgale = new JButton("=");
     
    // Crée le panneau avec le quadrillage qui contient
        // les 12 boutons - les 10 boutons numériques et ceux
        // représentant la virgule et le signe égale
        panneauChiffres = new JPanel();
        GridLayout disposition2 = new GridLayout(4, 3); 
        panneauChiffres.setLayout(disposition2);
     
        // Ajoute les contrôles au panneau panneauChiffres
        panneauChiffres.add(bouton1);
        panneauChiffres.add(bouton2);
        panneauChiffres.add(bouton3);
        panneauChiffres.add(bouton4);
        panneauChiffres.add(bouton5);
        panneauChiffres.add(bouton6);
        panneauChiffres.add(bouton7);
        panneauChiffres.add(bouton8);
        panneauChiffres.add(bouton9);
        panneauChiffres.add(bouton0);
        panneauChiffres.add(boutonVirgule);
        panneauChiffres.add(boutonEgale);
     
        // Ajoute panneauChiffres à la zone centrale de la 
        // fenêtre
        contenuFenêtre.add("Center", panneauChiffres);
     
        // Crée le cadre et lui affecte son contenu	               
        JFrame frame = new JFrame("Calculatrice");
        frame.setContentPane(contenuFenêtre);
     
        // Affecte à la fenêtre des dimensions suffisantes pour	  
        // prendre en compte tous les contrôles
        frame.pack(); 
     
        // Enfin, affiche la fenêtre
        frame.setVisible(true);
      }
     
      public static void main(String[] args) {
        Calculatrice calc = new Calculatrice();
      }
    }
    Ce code est celui donné dans l'exemple, et je n'arrive pas à le faire compiler, Eclipse me dit que l'erreur se situe à la fin, ou je met le main, pour qu'il compile la seule solution que j'ai trouvé est de créer une nouvelle classe et d'y inclure le main, sinon je n'y arrive pas, pourquoi ?

    Ensuite concernant un autre morceau 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
    import java.awt.event.ActionListener; 
    import java.awt.event.ActionEvent;
    import javax.swing.JButton;
     
    public class MoteurCalcul implements ActionListener {
     
      Calculatrice parent; // une référence à la Calculatrice
     
      // Le constructeur stocke la référence à la fenêtre 
      // Calculatrice dans la variable membre parent
      MoteurCalcul(Calculatrice parent) {
        this.parent = parent;
      }
     
      public void actionPerformed(ActionEvent événement) {
        // Retrouve la source de cette action
        JButton boutonCliqué = (JButton) événement.getSource();
     
        // Retrouve le texte existant dans le champ Affichage
        // de la Calculatrice
        String texteChampAffichage = 
    parent.champAffichage.getText();
     
        // Retrouve le libellé du bouton 
        String libelléBoutonCliqué = boutonCliqué.getText();
     
        // Affecte le nouveau texte au champ Affichage 
        parent.champAffichage.setText(texteChampAffichage + 
                                       libelléBoutonCliqué);
      }
    }
    Je n'ai pas bien compris l'utilisation de la référence parent, qui peut m'expliquer rapidement à quoi cela sert ?

    Merci pour votre aide

  2. #2
    Modérateur
    Avatar de XxArchangexX
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mars 2012
    Messages
    1 159
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mars 2012
    Messages : 1 159
    Points : 2 323
    Points
    2 323
    Par défaut
    C'est la base du langage orienté objet. Quand tu fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Calculatrice  Macalculette1 = new Calculatrice () 
    Calculatrice  Macalculette2 = new Calculatrice ()
    Tu créés 2 objets unique en mémoire, si tu modifies une variable de Macalculette1 dans Macalculette2 la même variable ne sera pas affectée.

    De la : MoteurCalcul implements ActionListener est une classe qui va utiliser les variables de Calculatrice on peut prendre "champAffichage".

    il faut donc que cette classe sache quel objet il faut modifié d’où la référence. En cliquant sur le bouton tu fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    MoteurCalcul(Calculatrice parent) {
    this.parent = parent;
    }
    Tu dis que c'est les variables de l'objet parent qui seront modifiées.

    J’espère être un peu près compréhensible, mais c'est vrai que c'est le point le plus difficile à comprendre dans le langage objet.
    L'Etat est bien administré quand l'escalier de l'école est usé et que l'herbe croît sur celui du tribunal.

    Modérateur BI

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Avril 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Avril 2012
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Autre petit problème
    Salut et merci, j'ai compris le principal

    J'ai encore cependant un problème, lorsque j'utilise ce code en parallèle à la classe Calculatrice tout fonctionne correctement, j'obtiens bien l'effet escompté :

    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
    import java.awt.event.ActionListener; 
    import java.awt.event.ActionEvent;
    import javax.swing.JOptionPane;
    import javax.swing.JButton;
    public class MoteurCalcul implements ActionListener {
      public void actionPerformed(ActionEvent événement) {
        // Retrouve la source de l'action
        JButton boutonCliqué = (JButton) événement.getSource();
        // Retrouve le libellé du bouton 
        String libelléBoutonCliqué = 
                                 boutonCliqué.getText();
     
        // Concatène le libellé du bouton au texte
        // de la boîte de message
        JOptionPane.showConfirmDialog(null,
                   "Tu as appuyé sur " + libelléBoutonCliqué,
                   "Juste un test",
                   JOptionPane.PLAIN_MESSAGE);
      }
    }
    Quand je veux continuer le tutoriel je dois remplacer ce code par celui ci :

    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
    import java.awt.event.ActionListener; 
    import java.awt.event.ActionEvent;
    import javax.swing.JButton;
     
    public class MoteurCalcul implements ActionListener {
     
      Calculatrice parent; // une référence à la Calculatrice
     
      // Le constructeur stocke la référence à la fenêtre 
      // Calculatrice dans la variable membre parent
      MoteurCalcul(Calculatrice parent) {
        this.parent = parent;
      }
     
      public void actionPerformed(ActionEvent événement) {
        // Retrouve la source de cette action
        JButton boutonCliqué = (JButton) événement.getSource();
     
        // Retrouve le texte existant dans le champ Affichage
        // de la Calculatrice
        String texteChampAffichage = 
    parent.champAffichage.getText();
     
        // Retrouve le libellé du bouton 
        String libelléBoutonCliqué = boutonCliqué.getText();
     
        // Affecte le nouveau texte au champ Affichage 
        parent.champAffichage.setText(texteChampAffichage + 
                                       libelléBoutonCliqué);
      }
    }
    Eclipse me dit que le constructeur moteurCalcul() est indéfinie..
    Je sais plus quoi faire, le tutoriel ne parle pas de cette erreur ni de comment résoudre ce problème de compilation.

    la classe Calculatrice est la suivante :

    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
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
     
    import javax.swing.*;
    import java.awt.GridLayout;
    import java.awt.BorderLayout;
    public class Calculatrice {
      // Déclaration de tous les composants de la calculatrice.
      JPanel contenuFenêtre;
      JTextField champAffichage;
      JButton bouton0;
      JButton bouton1;
      JButton bouton2;
      JButton bouton3;
      JButton bouton4;
      JButton bouton5;
      JButton bouton6;
      JButton bouton7;
      JButton bouton8;
      JButton bouton9;
      JButton boutonVirgule;
      JButton boutonEgale;
      JPanel panneauChiffres;
     
      // Le constructeur crée les composants en mémoire
      // et les ajoute au cadre en utilisant une combinaison 
      // de Borderlayout et Gridlayout
      Calculatrice() {
        contenuFenêtre = new JPanel();
     
        // Affecte un gestionnaire de présentation à ce panneau
        BorderLayout dispositionl = new BorderLayout(); 
        contenuFenêtre.setLayout(dispositionl);
     
        // Crée le champ d'affichage et le positionne dans   
        // la zone nord de la fenêtre
        champAffichage = new JTextField(30);
        contenuFenêtre.add("North", champAffichage);
     
        // Crée les boutons en utilisant le constructeur de
        // la classe JButton qui prend en paramètre le libellé 
        // du bouton 
        bouton0 = new JButton("0");
        bouton1 = new JButton("1");
        bouton2 = new JButton("2");
        bouton3 = new JButton("3");
        bouton4 = new JButton("4");
        bouton5 = new JButton("5");
        bouton6 = new JButton("6");
        bouton7 = new JButton("7");
        bouton8 = new JButton("8");
        bouton9 = new JButton("9");
        boutonVirgule = new JButton(",");
        boutonEgale = new JButton("=");
    // Crée le panneau avec le quadrillage qui contient
        // les 12 boutons - les 10 boutons numériques et ceux
        // représentant la virgule et le signe égale
        panneauChiffres = new JPanel();
        GridLayout disposition2 = new GridLayout(4, 3); 
        panneauChiffres.setLayout(disposition2);
     
        // Ajoute les contrôles au panneau panneauChiffres
        panneauChiffres.add(bouton1);
        panneauChiffres.add(bouton2);
        panneauChiffres.add(bouton3);
        panneauChiffres.add(bouton4);
        panneauChiffres.add(bouton5);
        panneauChiffres.add(bouton6);
        panneauChiffres.add(bouton7);
        panneauChiffres.add(bouton8);
        panneauChiffres.add(bouton9);
        panneauChiffres.add(bouton0);
        panneauChiffres.add(boutonVirgule);
        panneauChiffres.add(boutonEgale);
     
        // Ajoute panneauChiffres à la zone centrale de la 
        // fenêtre
        contenuFenêtre.add("Center", panneauChiffres);
     
        // Crée le cadre et lui affecte son contenu	               
        JFrame frame = new JFrame("Calculatrice");
        frame.setContentPane(contenuFenêtre);
     
        // Affecte à la fenêtre des dimensions suffisantes pour	  
        // prendre en compte tous les contrôles
        frame.pack(); 
     
        // Enfin, affiche la fenêtre
        frame.setVisible(true);
     
        MoteurCalcul moteurCalcul = new MoteurCalcul();
        bouton0.addActionListener(moteurCalcul);
      }
     
      public static void main(String[] args) {
        Calculatrice calc = new Calculatrice();
      }
    }
    Je comprends pas trop ce qui cloche..

    Merci pour votre aide

  4. #4
    Modérateur
    Avatar de XxArchangexX
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mars 2012
    Messages
    1 159
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mars 2012
    Messages : 1 159
    Points : 2 323
    Points
    2 323
    Par défaut
    Si tu utilises ce code la :
    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
     
    import java.awt.event.ActionListener; 
    import java.awt.event.ActionEvent;
    import javax.swing.JButton;
     
    public class MoteurCalcul implements ActionListener {
     
      Calculatrice parent; // une référence à la Calculatrice
     
      // Le constructeur stocke la référence à la fenêtre 
      // Calculatrice dans la variable membre parent
      MoteurCalcul(Calculatrice parent) {
        this.parent = parent;
      }
     
      public void actionPerformed(ActionEvent événement) {
        // Retrouve la source de cette action
        JButton boutonCliqué = (JButton) événement.getSource();
     
        // Retrouve le texte existant dans le champ Affichage
        // de la Calculatrice
        String texteChampAffichage = 
    parent.champAffichage.getText();
     
        // Retrouve le libellé du bouton 
        String libelléBoutonCliqué = boutonCliqué.getText();
     
        // Affecte le nouveau texte au champ Affichage 
        parent.champAffichage.setText(texteChampAffichage + 
                                       libelléBoutonCliqué);
      }
    }
    L'erreur est normal quand tu fais dans la casse Calculatrice :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    MoteurCalcul moteurCalcul = new MoteurCalcul();
    Java va creer un objet unique en mémoire en le construisant, pour cela il va appeller le constructeur de la classe MoteurCalcul ce qui s'écrit public nomclasse(){}, mais ici tu as public MoteurCalcul(Calculatrice cal){} donc il manque un paramètre à ton constructeur. Si tu veux tester tu fais public public MoteurCalcul(){} dans MoteurCalcul est sa devrait fonctionner, le truc c'est qu'après ton objet Calculatrice ne sera pas instancié, donc il va te mettre un nullPointerException.
    L'Etat est bien administré quand l'escalier de l'école est usé et que l'herbe croît sur celui du tribunal.

    Modérateur BI

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    294
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 294
    Points : 268
    Points
    268
    Par défaut
    Si tu n'implémentes pas de constructeur dans ta classe, lorsque tu va instancier celle ci, java va automatiquement faire appel à un constructeur par défaut.
    void MaClass(){}
    C'est ce qui se passe dans ton premier code.


    Dans ton second code, tu implémentes in constructeur avec un paramètre. Et lorsque tu veux l'instancier, tu fais appel au constructeur par défaut
    MoteurCalcul moteurCalcul = new MoteurCalcul();
    Ce qui est faut!

    Tu dois faire appelle au constructeur que t'as implémenté
    MoteurCalcul moteurCalcul = new MoteurCalcul(this.getclass());

  6. #6
    Nouveau Candidat au Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Avril 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Avril 2012
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Merci pour vos réponses.

    Tu dois faire appelle au constructeur que t'as implémenté
    Citation:
    MoteurCalcul moteurCalcul = new MoteurCalcul(this.getclass());
    J'ai essayé mais ça ne fonctionne pas, par contre en faisant comme cela :

    MoteurCalcul moteurCalcul = new MoteurCalcul(this);

    là ça passe, pourquoi ?

  7. #7
    Modérateur
    Avatar de XxArchangexX
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mars 2012
    Messages
    1 159
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mars 2012
    Messages : 1 159
    Points : 2 323
    Points
    2 323
    Par défaut
    this = > l'objet qui est en cours, c'est toujours sa qui est utilisé

    je ne voudrais pas dire de betise mais il me semble bien que
    this.getClass() pour acceder à la classe de l'objet

    illustrons

    Classe fenetre extends JFrame

    this = > l'objet fenetre
    this.getClass() => tu peux obtenir des infos sur la classe de l'objet fenetre comme son nom, le nombre de méthode, le type de la classe enfin tu accèdes à la structure de l'objet et non pas à l'objet lui même.
    L'Etat est bien administré quand l'escalier de l'école est usé et que l'herbe croît sur celui du tribunal.

    Modérateur BI

  8. #8
    Membre actif
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    294
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 294
    Points : 268
    Points
    268
    Par défaut
    Autant pour moi. C'est bien "this" qu'il faut utiliser.

Discussions similaires

  1. Quelques questions concernant un Userform
    Par rickgoz dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 31/10/2008, 16h51
  2. Quelques questions concernant un exo de BD
    Par dudule65 dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 17/01/2008, 14h25
  3. Quelques questions concernant PDCurses
    Par Electroniktor dans le forum C
    Réponses: 3
    Dernier message: 16/09/2007, 16h44
  4. quelques questions concernant g_free, g_malloc
    Par bit_o dans le forum GTK+ avec C & C++
    Réponses: 25
    Dernier message: 26/03/2007, 20h36
  5. [Kylix] Quelques questions
    Par onet dans le forum EDI
    Réponses: 4
    Dernier message: 23/11/2005, 10h53

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