Code de gestion des opérations d'une calculatrice en java

Fermé
stephanesamin Messages postés 3 Date d'inscription lundi 18 novembre 2013 Statut Membre Dernière intervention 21 novembre 2013 - Modifié par pijaku le 22/11/2013 à 13:11
stephanesamin Messages postés 3 Date d'inscription lundi 18 novembre 2013 Statut Membre Dernière intervention 21 novembre 2013 - 21 nov. 2013 à 17:44
salut la famille escusez moi je suis un débutant en programmation java et voila que j voulu réaliser une calculatrice en java mais le problème est que j pu finir la partie interface graphique de la calculatrice mais j du mal a générer le code sur la partie calcul et j'ai vraiment bésoin d'un soutien compréhensible et précis de tel sorte a finir entièrement ma calculatrice. voici le code de l'interface graphique de la calculatrice.



//importation des classes utilisées pr créer une interface graphiqque
import javax.swing.*;
// importation des classes fournissant des fonctions de lectre au clavier
import java.io.*;

//importation du gestionnaire de disposition
import java.awt.*;
// déclaration de la classe 
public class Calculatrice3 {
  // Déclaration de tous les composants de la calculatrice.
  JPanel fenêtr;
  JTextField affich;
  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 panChif;
  JPanel panOpé;
  JButton boutonPlus;
  JButton boutonMoins;
  JButton boutonFois;
  JButton boutondiv;
  JButton boutonc;
  JButton boutonoff;
  JButton boutonon;
   public Calculatrice3 (){
    
     fenêtr = new JPanel();
  BorderLayout disposi = new BorderLayout();
  fenêtr.setBackground(Color.CYAN);
  fenêtr.setLayout(disposi);
  affich = new JTextField(30);
  affich.enable(false);
  fenêtr.add(affich,BorderLayout.NORTH);
  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");
  boutondiv = new JButton ("\u00f7");
  boutonVirgule = new JButton(",");
  boutonEgale = new JButton("=");
  boutonPlus = new JButton("+");
  boutonMoins = new JButton("-");
  boutonFois = new JButton("*");
  boutonc = new JButton ("c");
  boutonoff = new JButton ("OF");
  boutonon = new JButton ("ON");
  
  panChif = new JPanel();
  GridLayout dispo2 = new GridLayout(3, 4);
  panChif.setLayout(dispo2);
  
  panChif.add(bouton1);
  panChif.add(bouton2);
  panChif.add(bouton3);
  panChif.add(bouton4);
  panChif.add(bouton5);
  panChif.add(bouton6);
  panChif.add(bouton7);
  panChif.add(bouton8);
  panChif.add(bouton9);
  panChif.add(bouton0);
  panChif.add(boutonEgale);
  panChif.add(boutonc);
  panChif.add(boutonoff);
  panChif.add(boutonon);
  panChif.add(boutonVirgule);
  
     fenêtr.add(panChif ,BorderLayout.CENTER);

  panOpé = new JPanel();
  GridLayout dispo3 = new GridLayout(1,1);
  panOpé.setLayout(dispo3);
  panOpé.add(boutonPlus);
  panOpé.add(boutonMoins);
  panOpé.add(boutonFois);
  panOpé.add(boutondiv);
  fenêtr.add(panOpé , BorderLayout.EAST);
  // déclaration de la fenêtre
  
  JFrame frame = new JFrame(" ma première calculatrice en java ");
  frame.setContentPane(fenêtr);
  frame.setSize(400,300);
  frame.pack();
  frame.setVisible(true);
  frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

   }
   public static void main (String [] args){
     Calculatrice3 cal = new Calculatrice3 ();
     
      }  
     
   }
A voir également:

3 réponses

KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
18 nov. 2013 à 19:28
Il faudrait au minimum que tu ajoutes des ActionListener à chacun de tes boutons pour savoir quand tu appuies dessus. Exemple :

bouton0.addActionListener(new ActionListener()
{
    @Override
    public void actionPerformed(ActionEvent e)
    {
        //TODO
    }
});

Après la manière de compléter la méthode dépend de comment tu veux faire tes calculs, si tu veux tout faire toi même, ou te servir d'outils déjà existant dans Java.
0
stephanesamin Messages postés 3 Date d'inscription lundi 18 novembre 2013 Statut Membre Dernière intervention 21 novembre 2013
Modifié par pijaku le 22/11/2013 à 13:12
ok merci mais n'empêche que j'ai éssayé d'utiliser les listener mais je m'en rend compte que lorsque j'exécute mon programme l'interface graphique de a calculatrice ainsi que l'éditeur se plante donc regarder ce code et dites moi ce qui ne va pas ds le code suivant :
1ère partie: code calculatrice

//importation des classes utilisées pr créer une interface graphiqque
import javax.swing.*;

//importation du gestionnaire de disposition
import java.awt.*;
import java.awt.event.*;


// déclaration de la classe 
public class Calculatrice3 {
  // Déclaration de tous les composants de la calculatrice.
  JPanel fenêtr;
  JTextField affich;
  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 panChif;
  JPanel panOpé;
  JButton boutonPlus;
  JButton boutonMoins;
  JButton boutonFois;
  JButton boutondiv;
  JButton boutonc;
  JButton boutonoff;
  JButton boutonon;
   public Calculatrice3 (){
    
     fenêtr = new JPanel();
  BorderLayout disposi = new BorderLayout();
  fenêtr.setBackground(Color.CYAN);
  fenêtr.setLayout(disposi);
  affich = new JTextField(30);
  affich.enable(false);
  fenêtr.add(affich,BorderLayout.NORTH);
  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");
  boutondiv = new JButton ("\u00f7");
  boutonVirgule = new JButton(",");
  boutonEgale = new JButton("=");
  boutonPlus = new JButton("+");
  boutonMoins = new JButton("-");
  boutonFois = new JButton("*");
  boutonc = new JButton ("c");
  boutonoff = new JButton ("OF");
  boutonon = new JButton ("ON");
  
  
  
  
  panChif = new JPanel();
  GridLayout dispo2 = new GridLayout(3, 4);
  panChif.setLayout(dispo2);
  
  panChif.add(bouton1);
  panChif.add(bouton2);
  panChif.add(bouton3);
  panChif.add(bouton4);
  panChif.add(bouton5);
  panChif.add(bouton6);
  panChif.add(bouton7);
  panChif.add(bouton8);
  panChif.add(bouton9);
  panChif.add(bouton0);
  panChif.add(boutonEgale);
  panChif.add(boutonc);
  panChif.add(boutonoff);
  panChif.add(boutonon);
  panChif.add(boutonVirgule);
  
     fenêtr.add(panChif ,BorderLayout.CENTER);

  panOpé = new JPanel();
  GridLayout dispo3 = new GridLayout(1,1);
  panOpé.setLayout(dispo3);
  panOpé.add(boutonPlus);
  panOpé.add(boutonMoins);
  panOpé.add(boutonFois);
  panOpé.add(boutondiv);
  fenêtr.add(panOpé , BorderLayout.EAST);
  // déclaration de la fenêtre
  
  JFrame frame = new JFrame(" ma première calculatrice en java ");
  frame.setContentPane(fenêtr);
  frame.setSize(400,300);
  frame.pack();
  frame.setVisible(true);
  frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  
  //Création d'une instance du récepteur d'événements MoteurCalcul et transmettons au moteur une référence à elle-même.
  
  
   MoteurCalcul motcalc = new MoteurCalcul (this);
     bouton0.addActionListener(motcalc);
  bouton1.addActionListener(motcalc);
  bouton2.addActionListener(motcalc);
  bouton3.addActionListener(motcalc);
  bouton4.addActionListener(motcalc);
  bouton5.addActionListener(motcalc);
  bouton6.addActionListener(motcalc);
  bouton7.addActionListener(motcalc);
  bouton8.addActionListener(motcalc);
  bouton9.addActionListener(motcalc);
  
  boutonEgale.addActionListener(motcalc);
  boutonc.addActionListener(motcalc);
  boutondiv.addActionListener(motcalc);
  boutonFois.addActionListener(motcalc);
  boutonPlus.addActionListener(motcalc);
  boutonMoins.addActionListener(motcalc);
  boutonVirgule.addActionListener(motcalc); 
   
   
  }
  
   public static void main (String [] args){
     Calculatrice3 cal = new Calculatrice3 ();
   }
   }



2ème partie : classe fille



import java.awt.event.ActionListener; 
import java.awt.event.ActionEvent;
import javax.swing.JOptionPane;
import javax.swing.JButton;

import java.text.NumberFormat;
//importation des classes permettant de connaître la position actuelle de l'analyse en cours
import java.text.ParsePosition;

public class MoteurCalcul extends Calculatrice3 implements ActionListener{
 
   Calculatrice3 par; // une référence à la fenêtre Calculatrice3
    char actionSélectionnée = ' ';  // +, -, /, ou *
   
    double résultat = 0;  
  // un objet capable de lire et présenter les nombres

    NumberFormat formatNombres = NumberFormat.getInstance(); 

    // Le constructeur stocke la référence à la fenêtre Calculatrice3 dans la variable membre par
    MoteurCalcul(final Calculatrice3 par) {
      this.par = par;
    }
   
    public void actionPerformed(ActionEvent événement) {
      
      // Retrouve la source de l'action
      JButton boutonCliqué = (JButton) événement.getSource();
      String affich = 
           par.affich.getText();

      double valeurAffichée = 0;

      // Retrouve le nombre présenté dans le champ texte  s'il n'est pas vide
      if (!"".equals(affich)) {
        valeurAffichée = 
          // analyse la chaîne de caractères
          formatNombres.parse(affich, 
            new ParsePosition(0) /* ne sert pas */).
            // puis donne sa valeur en tant que double
            doubleValue();
      }
      Object sourceEvénement = événement.getSource();

      /* Pour chaque bouton d'action, mémorise l'action 
       sélectionnée, +, -, /, ou *, stocke la valeur courante 
       dans la variable résultatCourant et vide le champ  
      /Affichage avant l'entrée du nombre suivant */

      

  if (sourceEvénement == par.boutonPlus) {
   actionSélectionnée = '+';
   résultat = valeurAffichée;
   par.affich.setText("");
      } 
      else if (sourceEvénement == par.boutonMoins) {
   actionSélectionnée = '-';
   résultat = valeurAffichée;
   par.affich.setText("");
      } 
      else if (sourceEvénement == par.boutondiv) {
   actionSélectionnée = '\u00f7';
   résultat = valeurAffichée; 
   par.affich.setText("");
      } 
      else if (sourceEvénement == par.boutonFois) {
   actionSélectionnée = '*'; 
   résultat = valeurAffichée;
   par.affich.setText("");
      } 
      else if (sourceEvénement == par.boutonEgale) {
      // Effectue les calculs en fonction de actionSélectionnée
      // Modifie la valeur de la variable résultatCourant 
      // et affiche le résultat
        if (actionSélectionnée == '+') {
         résultat += valeurAffichée;
          // Convertit le résultat en le transformant en String 
          // à l'aide de formatNombres 
    par.affich.setText(  formatNombres.format(résultat));
   } 
        else if (actionSélectionnée == '-') { 
      résultat -= valeurAffichée;
    par.affich.setText(formatNombres.format(résultat));
   } 
        else if (actionSélectionnée == '\u00f7') {
       résultat /= valeurAffichée; 
    par.affich.setText(formatNombres.format(résultat));
        } 
        else if (actionSélectionnée == '*') {
     résultat *= valeurAffichée; 
    par.affich.setText(formatNombres.format(résultat));
        }
      } 
      else {
   // Pour tous les boutons on ajoute le libellé  du bouton au champ texte 
        String libelléBoutonCliqué = boutonCliqué.getText();
   par.affich.setText(affich + libelléBoutonCliqué);
      }
    }
  }
0
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
20 nov. 2013 à 19:18
Ton affichage bug parce que le constructeur de Calculatrice3 est appelé par les objets MoteurCalcul, donc tu créés une infinité de fenêtre en même temps, ce qui plante l'affichage.

En fait j'imaginais quelque chose de plus simple pour ton problème, au lieu d'avoir un gros Listener qui fait tout une succession de if/else, il suffirait de faire des petits Listener pour chacune des touches, en passant par exemple par un StringBuilder qui accumulerait les caractères entrés, jusqu'au moment du calcul.

final StringBuilder sb = new StringBuilder();

bouton0.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
sb.append("0");
}
});

bouton1.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
sb.append("1");
}
});

// ...

boutonEgale.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
sb.replace(0, sb.length(), calculer(sb.toString()));
}
});

En fait il y aurait même encore plus simple, en faisant un tableau de JButton pour la plupart de tes touches. Par exemple avec un bouton[0], bouton[1]... à la place de bouton0, bouton1... comme ça un certain nombres d'opérations se simplifieraient avec une boucle for.
0
stephanesamin Messages postés 3 Date d'inscription lundi 18 novembre 2013 Statut Membre Dernière intervention 21 novembre 2013
21 nov. 2013 à 17:44
ok c fai mais di moi kske je dois faire pr ne plus que mon application ne se plante plus car je ne trouve vraimen pas la solution donc stp montre moi le chemin et indique moi clairement ce que je dois faire. merçi d'avance
0